Chức năng gọi Python mà không cần chờ trả về

Chúng tôi sử dụng cookie để cải thiện trải nghiệm duyệt web của bạn trên trang web của chúng tôi, để hiển thị cho bạn nội dung được cá nhân hóa và để phân tích lưu lượng truy cập trang web của chúng tôi. Bằng cách duyệt trang web của chúng tôi, bạn đồng ý với việc chúng tôi sử dụng cookie. Đọc chính sách bảo mật

Đăng ký để cập nhật công nghệ mới nhất

Không thư rác. Chỉ những hiểu biết của chuyên gia

Tôi đồng ý với Chính sách quyền riêng tư của Velotio

Cảm ơn. Bạn đã được đăng ký

Ối. Đã xảy ra lỗi khi gửi biểu mẫu

X

Chức năng gọi Python mà không cần chờ trả về

Velotio Technologies mua lại Media Magic Technologies để mở rộng khả năng kỹ thuật Di động và Truyền thông. Tìm hiểu thêm về việc mua lại và các kế hoạch tương lai của chúng tôi tại đây

Đọc thêm

Dịch vụ

Theo mô hình tương tác

Đội kỹ thuật từ xa

Thuê các nhà phát triển từ xa (được quản lý & tại một địa điểm)

Phát triển sản phẩm hoàn chỉnh

Đưa sản phẩm của bạn từ ý tưởng đến MVP và đạt được quy mô

Gia công chiến lược

Thiết lập trung tâm kỹ thuật ngoài khơi của bạn ở Ấn Độ với mô hình BOT rủi ro thấp

Theo giai đoạn công ty

Giai đoạn đầu

Xây dựng MVP hoặc sản phẩm sẵn sàng ra mắt

Sự phát triển cao

Mở rộng quy mô nỗ lực kỹ thuật của bạn. thuê nhanh hơn

Tại sao Velotio?

  • Kỹ sư giàu kinh nghiệm, trình độ cao
  • Mở rộng quy mô theo ý muốn
  • Giữ chân nhân viên cao
  • Đội ngũ lãnh đạo tận tâm
  • Bảo vệ IP mạnh mẽ

chuyên môn

Kỹ thuật sản phẩm

Thiết kế UI/UX

Sản phẩm thủ công với trải nghiệm người dùng tuyệt vời

phát triển phản ứng

Các ứng dụng React nhanh và nhạy được xây dựng bằng các công nghệ mới nhất

Phần cuối / Phần mềm trung gian

Hệ thống phụ trợ cấp doanh nghiệp mở rộng quy mô

Phát triển ứng dụng di động

Ứng dụng di động gốc và lai chất lượng cao dành cho doanh nghiệp mới thành lập và doanh nghiệp

Truyền thông và Truyền phát

Xây dựng các giải pháp Âm thanh/Video được tối ưu hóa và có thể mở rộng

QA / Kỹ thuật kiểm tra

Dịch vụ kỹ thuật End to End Test

Đám mây & DevOps

CI/CD & Tự động hóa cơ sở hạ tầng

Thiết lập quy trình Phân phối liên tục cho các chu kỳ phát hành ngắn

Áp dụng Kubernetes

Tăng tốc việc áp dụng Kubernetes của bạn

Kỹ thuật dữ liệu & ML

Kỹ thuật dữ liệu & Đường ống

Thiết kế và triển khai các đường ống ETL thời gian thực

Phát triển Chatbot

Phát triển các chatbot đa kênh phức tạp

trí tuệ nhân tạo & học máy

AI & ML để thu thập thông tin chi tiết từ dữ liệu của bạn

Chiến lược và Tư vấn

chuyển đổi kỹ thuật số

Giúp các doanh nghiệp nắm bắt quá trình chuyển đổi kỹ thuật số toàn diện và khai thác lợi ích của các công nghệ mới nổi

Chúng tôi tự hào được vinh danh là một trong những Nơi làm việc tốt nhất Ấn Độ™
cho Nữ 2022

Đọc tin tức

Các ngành nghề

Câu chuyện thành công

Về

Giới thiệu về Velotio

Tìm hiểu về lãnh đạo cấp cao của chúng tôi và chúng tôi là ai

Văn hoá

Xem cách chúng tôi làm việc và những gì chúng tôi coi trọng

Chương trình tăng tốc Golang & Kubernetes

Được tuyển dụng và đào tạo để trở thành kỹ sư chuyên nghiệp về đám mây

CSR

Hãy xem các sáng kiến ​​của chúng tôi nhằm trao quyền cho giới trẻ đóng vai trò là tác nhân của sự thay đổi

Bảo vệ IP

Tìm hiểu cách chúng tôi đảm bảo an ninh hoàn toàn cho doanh nghiệp của bạn

Cách chúng tôi giao hàng

Biết cách làm việc với Velotio trông như thế nào

nghề nghiệp

Hãy tham gia cộng đồng đam mê công nghệ sôi động tại Velotio

Thông cáo báo chí

Hãy xem những tin tức và cập nhật mới nhất của chúng tôi

Tại sao Velotio?

  • Kỹ sư giàu kinh nghiệm, trình độ cao
  • Mở rộng quy mô theo ý muốn
  • Giữ chân nhân viên cao
  • Đội ngũ lãnh đạo tận tâm
  • Bảo vệ IP mạnh mẽ

Tài nguyên

Blog kỹ thuật

Blog công nghệ được viết bởi các kỹ sư của chúng tôi

Quần short công nghệ Velotio

Video ngắn 10 phút về các công cụ, xu hướng và công nghệ mới nhất

Rung động Velotio

Cái nhìn của người trong cuộc về điều khiến chúng ta khác biệt

Vélotio Elevate

Hội nghị công nghệ ảo hàng năm của chúng tôi để trao đổi kiến ​​thức và chia sẻ kiến ​​thức chuyên môn

Velotio Trong tin tức

Xem những gì chúng tôi đã làm gần đây

Tìm hiểu sâu về văn hóa làm việc được trao quyền và tự chủ của chúng tôi

Tải xuống Sách Văn hóa của Velotio

Liên hệ chúng tôi

Liên hệ chúng tôi

x

Triển khai các tính năng không đồng bộ trong Python - Hướng dẫn từng bước

Prashant Kumar

Phát triển toàn diện

Thẻ

lập trình không đồng bộ

lập trình song song

IO không đồng bộ

đồng thời

Lập trình không đồng bộ trong Python

Lập trình không đồng bộ là một đặc điểm của các ngôn ngữ lập trình hiện đại cho phép một ứng dụng thực hiện các hoạt động khác nhau mà không cần đợi bất kỳ hoạt động nào trong số đó. Tính không đồng bộ là một trong những lý do lớn cho sự phổ biến của Node. js

Chúng tôi đã thảo luận về các tính năng không đồng bộ của Python như một phần của bài viết trước của chúng tôi. giới thiệu về lập trình không đồng bộ trong Python. Blog này là một sự phát triển tự nhiên về cùng một chủ đề. Chúng ta sẽ thảo luận chi tiết về các tính năng không đồng bộ trong Python và xem xét một số ví dụ thực tế

Hãy xem xét một ứng dụng quét web truyền thống cần mở hàng nghìn kết nối mạng. Chúng tôi có thể mở một kết nối mạng, tìm nạp kết quả và sau đó chuyển sang các kết nối tiếp theo lặp đi lặp lại. Cách tiếp cận này làm tăng độ trễ của chương trình. Nó dành nhiều thời gian để mở một kết nối và đợi người khác hoàn thành công việc của họ

Mặt khác, async cung cấp cho bạn phương pháp mở hàng nghìn kết nối cùng lúc và hoán đổi giữa các kết nối khi chúng kết thúc và trả về kết quả của chúng. Về cơ bản, nó gửi yêu cầu đến một kết nối và chuyển sang kết nối tiếp theo thay vì đợi phản hồi của kết nối trước đó. Nó tiếp tục như vậy cho đến khi tất cả các kết nối đã trả về kết quả đầu ra.   

Chức năng gọi Python mà không cần chờ trả về

Nguồn. phpmind

Từ biểu đồ trên, chúng ta có thể thấy rằng sử dụng lập trình đồng bộ trên bốn tác vụ mất 45 giây để hoàn thành, trong khi ở lập trình không đồng bộ, bốn tác vụ đó chỉ mất 20 giây

Lập trình không đồng bộ phù hợp ở đâu trong thế giới thực?

Lập trình không đồng bộ phù hợp nhất cho các tình huống phổ biến như

1. Chương trình mất quá nhiều thời gian để thực hiện

2. Lý do chậm trễ là chờ thao tác nhập hoặc xuất chứ không phải tính toán

3. Đối với các tác vụ có nhiều hoạt động đầu vào hoặc đầu ra được thực hiện cùng một lúc

Và về mặt ứng dụng, đây là những trường hợp sử dụng ví dụ

  • Rút trích nội dung trang web
  • Dịch vụ mạng

Sự khác biệt giữa Song song, Đồng thời, Phân luồng và IO không đồng bộ

Bởi vì chúng ta đã thảo luận chi tiết về sự so sánh này trong bài viết trước, nên chúng ta sẽ lướt qua khái niệm này một cách nhanh chóng vì nó sẽ giúp ích cho chúng ta với ví dụ thực hành sau này

Song song liên quan đến việc thực hiện nhiều hoạt động tại một thời điểm. Đa xử lý là một ví dụ về nó. Nó rất phù hợp với các tác vụ liên quan đến CPU

Đồng thời rộng hơn một chút so với Song song. Nó liên quan đến nhiều nhiệm vụ chạy theo cách chồng chéo

Luồng - một luồng là một luồng thực thi riêng biệt. Một tiến trình có thể chứa nhiều luồng và mỗi luồng chạy độc lập. Đó là lý tưởng cho các nhiệm vụ ràng buộc IO

Async IO là thiết kế đơn luồng, đơn xử lý sử dụng đa nhiệm hợp tác. Nói một cách đơn giản, async IO mang lại cảm giác đồng thời mặc dù sử dụng một luồng đơn trong một quy trình


Chức năng gọi Python mà không cần chờ trả về

Quả sung. - So sánh đồng thời và song song


Các thành phần của lập trình Async IO

Hãy khám phá sâu các thành phần khác nhau của Async IO. Chúng tôi cũng sẽ xem xét một mã ví dụ để giúp chúng tôi hiểu việc triển khai

1. quân đoàn

Coroutines chủ yếu là hình thức tổng quát hóa của chương trình con. Chúng thường được sử dụng cho các tác vụ hợp tác và hoạt động giống như trình tạo Python

Hàm async sử dụng từ khóa đang chờ để biểu thị một quy trình đăng ký. Khi sử dụng từ khóa chờ đợi, các coroutine sẽ giải phóng luồng điều khiển trở lại vòng lặp sự kiện

Để chạy một coroutine, chúng ta cần lên lịch cho nó trên vòng lặp sự kiện. Sau khi lên lịch, các coroutine được bao bọc trong Nhiệm vụ dưới dạng đối tượng Tương lai

Ví dụ

Trong đoạn mã dưới đây, chúng tôi đã gọi async_func từ chức năng chính. Chúng tôi phải thêm từ khóa chờ trong khi gọi chức năng đồng bộ hóa. Như bạn có thể thấy, async_func sẽ không làm gì trừ khi việc triển khai từ khóa đang chờ đi kèm với nó

MÃ SỐ. https. //ý chính. github. com/velotiotech/62621dc28aa525bc1217e233fa5a7b40. js

đầu ra

MÃ SỐ. https. //ý chính. github. com/velotiotech/d868f2238e0d0cfb0d3b8bb7495c647d. js

2. nhiệm vụ

Các tác vụ được sử dụng để lên lịch cho các coroutine đồng thời

Khi gửi một quy trình đăng ký đến một vòng lặp sự kiện để xử lý, bạn có thể nhận một đối tượng Tác vụ, cung cấp một cách để kiểm soát hành vi của quy trình đăng ký từ bên ngoài vòng lặp sự kiện

Ví dụ

Trong đoạn mã bên dưới, chúng tôi đang tạo một tác vụ bằng cách sử dụng create_task (một chức năng sẵn có của thư viện asyncio) và sau đó chúng tôi sẽ chạy nó

MÃ SỐ. https. //ý chính. github. com/velotiotech/2883ae8fc08b4a16ad4b2b991b92642f. js

đầu ra

MÃ SỐ. https. //ý chính. github. com/velotiotech/16e4aafcc5957b6813ae02611fd52807. js

3 vòng lặp sự kiện

Cơ chế này chạy các coroutine cho đến khi chúng hoàn thành. Bạn có thể tưởng tượng nó giống như vòng lặp while(True) giám sát coroutine, nhận phản hồi về những gì không hoạt động và tìm kiếm những thứ có thể được thực thi trong thời gian chờ đợi

Nó có thể đánh thức một coroutine nhàn rỗi khi bất cứ thứ gì mà coroutine đó đang chờ trở nên khả dụng

Mỗi lần chỉ có thể chạy một vòng lặp sự kiện trong Python

Ví dụ

Trong đoạn mã bên dưới, chúng tôi đang tạo ba tác vụ, sau đó nối chúng vào danh sách và thực thi tất cả các tác vụ một cách không đồng bộ bằng cách sử dụng get_event_loop, create_task và chức năng chờ đợi của thư viện asyncio

MÃ SỐ. https. //ý chính. github. com/velotiotech/cfa3219da51ef24218c33706971516de. js

đầu ra

MÃ SỐ. https. //ý chính. github. com/velotiotech/ee345dfd8293b70c56dbdc98fedd90f0. js

Tương lai

Tương lai là một đối tượng đặc biệt, có sẵn ở mức độ thấp, đại diện cho kết quả cuối cùng của hoạt động không đồng bộ

Khi một đối tượng Tương lai được chờ đợi, đồng quy trình sẽ đợi cho đến khi Tương lai được giải quyết ở một nơi khác

Chúng ta sẽ xem xét mã mẫu cho các đối tượng Tương lai trong phần tiếp theo

So sánh giữa Đa luồng và IO không đồng bộ

Trước khi chúng tôi chuyển sang Async IO, hãy sử dụng đa luồng làm điểm chuẩn và sau đó so sánh chúng để xem cái nào hiệu quả hơn

Đối với điểm chuẩn này, chúng tôi sẽ tìm nạp dữ liệu từ một URL mẫu (trang web Velotio Career) với các tần suất khác nhau, chẳng hạn như một lần, mười lần, 50 lần, 100 lần, 500 lần, tương ứng

Sau đó, chúng tôi sẽ so sánh thời gian thực hiện của cả hai phương pháp này để tìm nạp dữ liệu cần thiết

Thực hiện

Mã đa luồng

MÃ SỐ. https. //ý chính. github. com/velotiotech/d33aad834064c12a1a28af5d8d3a2c18. js

đầu ra

MÃ SỐ. https. //ý chính. github. com/velotiotech/c087f7a863602bf122097f56e209cf28. js

ProcessPoolExecutor là gói Python triển khai giao diện Executor. Fetch_url_data là một hàm để tìm nạp dữ liệu từ URL đã cho bằng cách sử dụng gói yêu cầu python và hàm get_all_url_data được sử dụng để ánh xạ hàm fetch_url_data vào danh sách các URL

Ví dụ lập trình IO không đồng bộ

MÃ SỐ. https. //ý chính. github. com/velotiotech/3bd9314613b1079d1dd2a69048676457. js

đầu ra

MÃ SỐ. https. //ý chính. github. com/velotiotech/7480b34b26525e2d3bba07dc61665397. js

Chúng ta cần sử dụng hàm get_event_loop để tạo và thêm các tác vụ. Để chạy nhiều hơn một URL, chúng tôi phải sử dụng ensure_future và chức năng thu thập

Hàm fetch_async được sử dụng để thêm tác vụ vào đối tượng event_loop và hàm fetch_url_data được sử dụng để đọc dữ liệu từ URL bằng gói phiên. Phương thức future_result trả về phản hồi của tất cả các tác vụ

Kết quả

Như bạn có thể thấy từ cốt truyện, lập trình không đồng bộ hiệu quả hơn nhiều so với đa luồng cho chương trình trên.  

Biểu đồ của chương trình đa luồng trông tuyến tính, trong khi biểu đồ chương trình asyncio tương tự như logarit


Chức năng gọi Python mà không cần chờ trả về

Phần kết luận

Như chúng ta đã thấy trong thử nghiệm ở trên, Async IO cho thấy hiệu suất tốt hơn với việc sử dụng đồng thời hiệu quả hơn so với đa luồng

Async IO có thể có lợi trong các ứng dụng có thể khai thác đồng thời. Mặc dù, dựa trên loại ứng dụng mà chúng tôi đang xử lý, việc chọn Async IO thay vì các triển khai khác là rất thực tế

Chúng tôi hy vọng bài viết này đã giúp bạn hiểu thêm về tính năng không đồng bộ trong Python và cung cấp cho bạn một số kinh nghiệm thực hành nhanh bằng cách sử dụng các ví dụ mã được chia sẻ ở trên

Nhận các blog kỹ thuật mới nhất được gửi thẳng đến hộp thư đến của bạn

không có thư rác. Chỉ những hiểu biết của chuyên gia

Tôi đồng ý với Chính sách quyền riêng tư của Velotio

Cảm ơn. Nội dung gửi của bạn đã được nhận

Ối. Đã xảy ra lỗi khi gửi biểu mẫu

BÀI VIẾT THÊM CỦA TÁC GIẢ NÀY

Prashant Kumar

Phát triển toàn diện

Prashant là kỹ sư phần mềm tại Velotio. Anh ấy có kinh nghiệm về Python, Django và JavaScript. Anh ấy đã giúp khách hàng tạo các đường dẫn ETL và viết các tập lệnh Python. Anh ấy rất quan tâm đến lập trình cạnh tranh. Trong thời gian rảnh rỗi, anh ấy thích giải câu đố và chơi cricket