Может ли кто-нибудь предоставить практические советы о том, как выбрать между задачами и coroutines модуля asyncio python?Когда следует использовать задачу вместо сопрограммы?
Если бы я достичь что-то асинхронно, я мог бы сделать что-либо из ниже 2 -
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()
Какие факторы решить, какой из 2-х выше способов выбрать?
Как правило, вы бы использовать сопрограмму, когда вы хотите, чтобы непосредственно пару его в вызывающем родительских сопрограммы, используя выход из. Эта связь - это то, что заставляет ребенка coroutine и вынуждает родительскую сопрограмму ждать, пока дочерняя сопрограмма вернется до продолжения. Задача, с другой стороны, не должна управляться родительской сопрограммой, поскольку она может управлять собой. – shongololo
Есть ли [этот вопрос] (http://stackoverflow.com/q/27076577/2073595) ответ на ваш вопрос удовлетворительным образом? Я соблазн отметить это как обман, но дайте мне знать, если вы ищете дополнительную информацию. – dano
Кроме того, 'loop.run_until_complete (coro)' всегда преобразует 'coro' в' Task' внутри; вам нужна хотя бы одна «задача» для управления программой. – dano