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
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êmDị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á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 VelotioLiê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.
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
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
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 VelotioCả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