首页 文章

asyncio中的合作产量

提问于
浏览
1

我想把这个任务卸载到一个线程(现在) . 如何在这个长时间运行的任务中正确"yield"控制到eventloop,以便仍然提供Web请求(注意:我在这里使用"yield"在协同调度意义上,不是在生成器意义上,或者是python关键字 yield ) .

我的建议是做一个 await asyncio.sleep(0) ,但有保证这不仅仅是作为NOP实现的吗?我一直在寻找asyncio库中的专用函数来做到这一点,但到目前为止一直无法找到 .

示例(python 3.5异步/等待样式):

async def long_task():
    for i in range(LARGE_NUMBER):
        do_something(i)
        if i % 100 == 0:
            await asyncio.sleep(0)

1 回答

  • 1

    它没有在doc中提及,但目前 asyncio.sleep(0) 是执行此操作的常用方法 . 你可以阅读完整的讨论here . 而且 asyncio.sleep(0) 特别是optimized做的工作 . 自从这个案例has test,我想你可能不会害怕行为 .

相关问题