Chức năng không đồng bộ Python
Trong Phòng của Nhà văn tuần này - một loạt blog thường xuyên gồm các bài báo và hướng dẫn được viết bởi các nhà công nghệ trong Cộng đồng Andela của chúng tôi - Ezzeddin Abdullah giới thiệu về lập trình không đồng bộ trong Python bằng Async IO Show
Viết mã tuần tự (hoặc đồng bộ) quen thuộc với nhiều lập trình viên, ngay cả khi họ mới bắt đầu. Đó là loại mã được thực thi từng dòng một, từng lệnh một Trong thế giới không đồng bộ, sự xuất hiện của các sự kiện độc lập với luồng chương trình chính. Điều này có nghĩa là các hành động được thực thi trong nền mà không cần chờ hoàn thành hành động trước đó Nói cách khác, các dòng mã được thực hiện đồng thời Hãy tưởng tượng bạn có một số nhiệm vụ độc lập nhất định và mỗi nhiệm vụ mất rất nhiều thời gian để hoàn thành. Đầu ra của chúng không phụ thuộc vào nhau. Vì vậy, bạn muốn bắt đầu tất cả chúng cùng một lúc. Nếu các tác vụ này được thực hiện theo một thứ tự cụ thể, chương trình sẽ phải đợi mỗi tác vụ hoàn thành trước khi bắt đầu tác vụ tiếp theo. Thời gian chờ đợi này đang chặn chương trình Mô hình lập trình không đồng bộ giúp thực hiện đồng thời các tác vụ này và đảm bảo bạn có thể đánh bại thời gian chờ đợi đó và sử dụng tài nguyên hiệu quả hơn Python 3 có hỗ trợ riêng cho lập trình không đồng bộ, Async IO, cung cấp một cách đơn giản để thực thi các tác vụ đồng thời Đầu tiên, hãy thiết lập môi trường của chúng ta và bắt đầu Thiết lập môi trườngTrong hướng dẫn này, chúng tôi sẽ sử dụng mô-đun async io trong Python 3. 7 trở lên, vì vậy chúng ta cần tạo một Python 3 mới. 7 môi trường. Một cách Python rõ ràng là thiết lập một môi trường ảo với conda và sau đó kích hoạt nó bằng các lệnh sau Khối xây dựng lập trình không đồng bộCó 3 khối xây dựng chính của lập trình không đồng bộ Python
Giới thiệu async trong PythonHai thành phần chính được giới thiệu trong Python
Chức năng và hành vi của mã sẽ khác khi bạn chọn không đồng bộ hoặc đồng bộ hóa để thiết kế mã của mình Nói rõ hơn, để thực hiện cuộc gọi HTTP, hãy cân nhắc sử dụng Tương tự, nếu bạn đang làm việc với trình điều khiển Mongo, thay vì dựa vào trình điều khiển đồng bộ như Trong thế giới không đồng bộ, mọi thứ chạy trong một vòng lặp sự kiện. Điều này cho phép bạn chạy một số coroutine cùng một lúc. Chúng ta sẽ xem coroutine là gì trong hướng dẫn này Mọi thứ bên trong Viết mã không đồng bộ không dễ như viết mã đồng bộ. Mô hình không đồng bộ Python dựa trên các khái niệm như sự kiện, gọi lại, vận chuyển, giao thức và tương lai Mọi thứ diễn ra nhanh chóng trong thế giới không đồng bộ của Python, vì vậy hãy theo dõi các bản cập nhật mới nhất Cách thức hoạt động của asyncioGói Hãy xem ví dụ về thế giới xin chào Thoạt nhìn, bạn có thể nghĩ rằng đây là mã đồng bộ vì bản in thứ hai đang đợi 1 giây để in “Xin chào lần nữa. ” sau “Xin chào thế giới. ”. Nhưng mã này thực sự không đồng bộ quân đoànBất kỳ hàm nào được định nghĩa là Để chạy coroutine, asyncio cung cấp ba cơ chế chính Hàm
Đoạn mã trước vẫn đợi quy trình đăng ký Để coroutine chạy đồng thời ta nên tạo task, đây là cơ chế thứ 3
Đoạn mã trên hiện đang chạy đồng thời và quy trình đăng ký Điều gì xảy ra như sau Quy trình say_something() bắt đầu với tác vụ đầu tiên của tham số (1 giây và một chuỗi “Nhiệm vụ 1”). Nhiệm vụ này được gọi là Sau đó, nó tạm dừng việc thực thi quy trình đăng ký và đợi 1 giây để quy trình đăng ký
Coroutine được lên lịch tự động để chạy trong vòng lặp sự kiện khi Các tác vụ giúp bạn chạy đồng thời nhiều coroutine, nhưng đây không phải là cách duy nhất để đạt được đồng thời Chạy các tác vụ đồng thời với asyncio. tập trung()Một cách khác để chạy đồng thời nhiều coroutine là sử dụng hàm Trong đoạn mã trước, thủ tục chúc mừng() được thực hiện đồng thời hai lần đối tượng chờ đợiMột đối tượng được gọi là có thể chờ nếu nó có thể được sử dụng với từ khóa đang chờ. Có 3 loại đối tượng chờ đợi chính. quy trình, nhiệm vụ và tương lai quân đoàn Trong ví dụ trước, các hàm quy trình Giả sử bạn bỏ qua từ khóa đang chờ trước nhiều quy trình đăng ký. Sau đó, bạn sẽ nhận được lỗi sau. nhiệm vụĐể lên lịch cho một coroutine chạy trong vòng lặp sự kiện, chúng ta sử dụng hàm tương laiMột Hết giờSử dụng Thời gian chờ ở đây trong đối tượng suy nghĩ cuối cùngTrong hướng dẫn này, chúng tôi đã giới thiệu lập trình không đồng bộ trong Python với mô-đun tích hợp Async IO. Chúng tôi đã xác định quy trình, nhiệm vụ và tương lai là gì Chúng tôi cũng đề cập đến cách chạy nhiều coroutine đồng thời theo nhiều cách khác nhau và xem cách mã đồng thời có thể là lựa chọn tốt nhất của bạn khi bạn cần tối ưu hóa hiệu suất cho một số tác vụ nhất định Bạn muốn trở thành một phần của Cộng đồng Andela?Với hơn 175.000 nhà công nghệ trong cộng đồng của chúng tôi, tại hơn 90 quốc gia, chúng tôi cam kết tạo ra các nhóm kỹ thuật từ xa đa dạng với những tài năng hàng đầu thế giới. Và các thành viên trong mạng lưới của chúng tôi thích trở thành một phần của cộng đồng tài năng, thông qua các hoạt động, lợi ích, sự cộng tác cũng như các cuộc gặp gỡ trực tuyến và ảo Python có async đang chờ không?Từ khóa async/await đã được chuẩn hóa trong Python 3. 7 . Họ đơn giản hóa lập trình không đồng bộ trong Python. Từ khóa async được sử dụng để tạo một coroutine Python. Từ khóa chờ tạm dừng việc thực thi một coroutine cho đến khi nó hoàn thành và trả về dữ liệu kết quả.
Tại sao nên sử dụng async trong Python?Các quy trình không đồng bộ có thể "tạm dừng" trong khi chờ đợi kết quả cuối cùng của chúng và để các quy trình khác chạy trong thời gian chờ đợi. Mã không đồng bộ, thông qua cơ chế trên, tạo điều kiện thực thi đồng thời . Nói cách khác, mã không đồng bộ mang lại giao diện đồng thời.
Không đồng bộ có nhanh hơn đồng bộ hóa Python không?Async không bị chặn, có nghĩa là nó sẽ gửi nhiều yêu cầu đến một máy chủ. Đồng bộ hóa đang chặn — nó sẽ chỉ gửi cho máy chủ một yêu cầu tại một thời điểm và sẽ đợi máy chủ trả lời yêu cầu đó. Async tăng thông lượng vì có thể chạy nhiều thao tác cùng lúc .
Chức năng không đồng bộ là gì?Một hàm async sẽ trả về một tham chiếu khác , trong khi Promise. giải quyết trả về cùng một tham chiếu nếu giá trị đã cho là một lời hứa. Nó có thể là một vấn đề khi bạn muốn kiểm tra tính bằng nhau của một lời hứa và giá trị trả về của một hàm không đồng bộ. |