2017-11-21 23 views
6

Tôi có một ứng dụng web được xây dựng trên khung công tác không đồng bộ Python 3.5+ (apistar, sanic, v.v.). Ứng dụng thực hiện các cuộc gọi IO khác nhau - tới cơ sở dữ liệu, Redis, v.v. - cũng không đồng bộ.Khi nào sử dụng nhiều vòng lặp sự kiện?

Some docs khuyên bạn sử dụng một vòng lặp sự kiện thêm:

import asyncio 
import peewee 
from peewee_async import Manager, PostgresqlDatabase 

loop = asyncio.new_event_loop() # Note: custom loop! 
database = PostgresqlDatabase('test') 
objects = Manager(database, loop=loop) 

Đó là sự hiểu biết của tôi rằng await báo cáo cho phép vòng lặp sự kiện để chuyển đổi bối cảnh bất cứ khi nào nó chạm IO, vòng sự kiện để thêm vẻ hoàn toàn không cần thiết.

Lợi ích của việc sử dụng vòng lặp sự kiện bổ sung là gì và khi nào các vòng lặp bổ sung sẽ được sử dụng?

Trả lời

0

Bạn chỉ nên sử dụng một vòng lặp IO cùng một lúc và chỉ cho phép một vòng lặp IO cho mỗi luồng cùng một lúc. threadingasyncio sử dụng các cách tiếp cận khác nhau và tương phản để đồng thời. Chạy nhiều vòng lặp (trong nhiều hơn một chuỗi) được coi là một thực hành không tốt và nên tránh.

Các tài liệu ở trên không đề xuất sử dụng vòng lặp "bổ sung". Nó cho thấy làm thế nào để xác định rõ ràng một vòng lặp tùy chỉnh mà không cần (hoặc trước đó) đăng ký nó như là vòng lặp mặc định.

0

Bạn nên sử dụng nhiều vòng lặp sự kiện từng cái một khi bạn chạy thử nghiệm của mình, vì vậy mỗi trường hợp thử nghiệm được chạy ngược với vòng lặp sự kiện của riêng nó.

Bạn có thể phải sử dụng nhiều vòng đồng thời tùy thuộc vào yêu cầu của các khuôn khổ cơ bản. Ví dụ: pyzmqquamash yêu cầu vòng lặp sự kiện của riêng họ.

Bạn có thể muốn sử dụng nhiều vòng đồng thời nếu bạn cần kiểm soát tốt hơn việc thực hiện tác vụ. Ví dụ khi bạn muốn nhóm các nhiệm vụ một cách rõ ràng và quyết định nhóm nào sẽ được thực hiện.

Hãy nhớ rằng việc triển khai hiện tại chỉ cho phép chạy một vòng lặp cho mỗi chuỗi tại một thời điểm.

Các vấn đề liên quan