Tôi đã đi qua các tài liệu Python cho asyncio
và tôi tự hỏi tại sao hầu hết các ví dụ sử dụng loop.run_until_complete()
như trái ngược với Asyncio.ensure_future()
.Tại sao hầu hết các ví dụ asyncio sử dụng loop.run_until_complete()?
Ví dụ: https://docs.python.org/dev/library/asyncio-task.html
Dường ensure_future
sẽ là một cách tốt hơn để chứng minh những ưu điểm của chức năng non-blocking. Mặt khác, run_until_complete
sẽ chặn vòng lặp giống như chức năng đồng bộ.
Điều này làm cho tôi cảm thấy mình nên sử dụng run_until_complete
thay vì kết hợp ensure_future
với loop.run_forever()
để chạy đồng thời nhiều đồng thời.
'run_until_complete' không chặn bất kỳ thứ gì. Sự khác biệt giữa nó và 'run_forever' là vòng lặp tạm dừng khi hoàn thành coroutine. Thời gian duy nhất nó sẽ chặn là nếu coroutine của bạn không bao giờ chờ đợi. – dirn
Tôi đã viết http://pastebin.com/Qi8dQ3bh này và nó dường như chặn các vòng lặp mặc dù. 'do_other_things()' không thực hiện cho đến khi 'do_io()' được thực hiện, mặc dù 'do_io()' đang chờ một giấc ngủ. – SamuelN
Đó là bởi vì không có gì khác đã được lên lịch với vòng lặp. Hãy thử gọi 'loop.create_task (do_other_things())' trước khi bạn gọi 'run_forever'. – dirn