2015-08-09 19 views
11

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?

+3

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

+0

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

+1

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

Trả lời

1

"Thông thường, 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 từ ​​khớp nối này là điều thúc đẩy coroutine con và buộc coroutine mẹ chờ đợi cho coroutine con quay trở lại trướ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

(Vui lòng không trả lời mọi thứ trong phần bình luận)

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