Có ai có thể đưa ra lời khuyên thiết thực về cách chọn giữa các nhiệm vụ và Cortsines của module python asyncio không?Khi nào một Nhiệm vụ nên được sử dụng thay vì một coroutine?
Nếu tôi là để đạt được một cái gì đó không đồng bộ, tôi có thể làm một trong hai 2 dưới đây -
import asyncio
@asyncio.coroutine
def print_hello():
print('Hello')
loop = asycio.get_event_loop()
loop.run_until_complete(print_hello)
loop.close()
HOẶC
import asyncio
@asyncio.coroutine
def print_hello():
print('Hello')
print_task = asyncio.ensure_future(print_hello)
loop = asycio.get_event_loop()
loop.run_until_complete(asyncio.wait_for(print_task))
loop.close()
Những yếu tố quyết định của 2 phương pháp trên để lựa chọn?
Nói chung bạn sẽ sử dụng một coroutine khi bạn muốn trực tiếp kết hợp nó với coroutine mẹ gọi bằng cách sử dụng năng suất. Sự kết hợp này là điều thúc đẩy coroutine trẻ em và buộc coroutine mẹ phải đợi cho coroutine con trở lại trước khi tiếp tục. Một nhiệm vụ, mặt khác, không phải được thúc đẩy bởi một coroutine mẹ bởi vì nó có thể tự lái. – shongololo
Có [câu hỏi này] (http://stackoverflow.com/q/27076577/2073595) trả lời câu hỏi của bạn một cách thỏa đáng không? Tôi bị cám dỗ để đánh dấu cái này là một bản dupe, nhưng hãy cho tôi biết nếu bạn đang tìm kiếm thêm thông tin. – dano
Ngoài ra, 'loop.run_until_complete (coro)' luôn chuyển 'coro' thành' Task' trong nội bộ; bạn cần ít nhất một "Task" để lái chương trình. – dano