【发布时间】:2015-08-09 13:50:20
【问题描述】:
谁能提供关于如何在 python asyncio 模块的 Tasks 和 Coroutines 之间进行选择的实用建议?
如果我要异步实现 某事,我可以执行以下 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()
哪些因素决定了选择上述两种方法中的哪一种?
【问题讨论】:
-
一般来说,当你想使用yield from将它直接耦合到调用父协程时,你会使用协程。这种耦合是驱动子协程并迫使父协程在继续之前等待子协程返回的原因。另一方面,Task 不必由父协程驱动,因为它可以自己驱动。
-
this question 是否以令人满意的方式回答了您的问题?我很想将此标记为骗子,但如果您正在寻找更多信息,请告诉我。
-
另外,
loop.run_until_complete(coro)总是在内部将coro转换为Task;您至少需要一个Task来驱动程序。 -
@dano 另一个问题有很好的理论讨论 - 谢谢!这个问题的目的是了解一种方法可以/应该优先于另一种方法的实际场景 - 当然是从实际经验中。
标签: python task python-asyncio