Подтвердить что ты не робот

Когда следует использовать задачу вместо сопрограммы?

Может ли кто-нибудь предоставить практические советы о том, как выбрать между python asyncio module Tasks и Corouts?

Если бы я мог добиться чего-то асинхронно, я мог бы сделать любой из двух ниже -

import asyncio

@asyncio.coroutine
def print_hello():
    print('Hello')

loop = asycio.get_event_loop()
loop.run_until_complete(print_hello)
loop.close()

ИЛИ

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()

Какие факторы определяют, какой из этих двух методов выбрать?

4b9b3361

Ответ 1

"Как правило, вы должны использовать сопрограмму, когда вы хотите напрямую связать ее с вызывающей родительской сопрограммой, используя выход из нее. Эта связь - это то, что управляет дочерней сопрограммой и заставляет родительскую сопрограмму ждать, пока дочерняя сопрограмма вернется до продолжения Задача, с другой стороны, не должна управляться родительской сопрограммой, потому что она может управлять собой". - shongololo

(Пожалуйста, не отвечайте на вопросы в комментариях)