有人能提供一些实际的建议来帮我选择 Python asyncio 模块的 Tasks 和 Coroutines 吗?
如果我想要异步地完成 某件事情,我可以采用以下两种方式之一 -
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()
哪些因素决定选择上述两种方法中的哪一种?
loop.run_until_complete(coro)
总是在内部将coro
转换为一个Task
;你需要至少一个Task
来驱动程序。 - danoTask
提供了诸如取消和检查堆栈帧等精细控制。如果可能的话,我建议使用coroutine
,这有助于保持逻辑简单和清晰。 - Huazuo Gao