Когда следует использовать задачу вместо сопрограммы?
Может ли кто-нибудь предоставить практические советы о том, как выбрать между 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()
Какие факторы определяют, какой из этих двух методов выбрать?
Ответы
Ответ 1
"Как правило, вы должны использовать сопрограмму, когда вы хотите напрямую связать ее с вызывающей родительской сопрограммой, используя выход из нее. Эта связь - это то, что управляет дочерней сопрограммой и заставляет родительскую сопрограмму ждать, пока дочерняя сопрограмма вернется до продолжения Задача, с другой стороны, не должна управляться родительской сопрограммой, потому что она может управлять собой". - shongololo
(Пожалуйста, не отвечайте на вопросы в комментариях)