异步中的合作收益
Cooperative yield in asyncio
我 运行 在(龙卷风)网络服务器上执行一项长期 CPU 密集型任务。我不想将此任务卸载到线程(暂时)。我如何在事件循环的这个长 运行 任务期间正确 "yield" 控制,以便网络请求仍在服务(注意:我在合作调度意义上使用 "yield"在这里,不是在生成器意义上,也不是 python 关键字 yield
).
我的建议是 await asyncio.sleep(0)
,但是是否可以保证这不只是作为 NOP 实施?我一直在寻找 asyncio 库中的专用函数来执行此操作,但到目前为止一直找不到。
示例(python 3.5 async/await 样式):
async def long_task():
for i in range(LARGE_NUMBER):
do_something(i)
if i % 100 == 0:
await asyncio.sleep(0)
我 运行 在(龙卷风)网络服务器上执行一项长期 CPU 密集型任务。我不想将此任务卸载到线程(暂时)。我如何在事件循环的这个长 运行 任务期间正确 "yield" 控制,以便网络请求仍在服务(注意:我在合作调度意义上使用 "yield"在这里,不是在生成器意义上,也不是 python 关键字 yield
).
我的建议是 await asyncio.sleep(0)
,但是是否可以保证这不只是作为 NOP 实施?我一直在寻找 asyncio 库中的专用函数来执行此操作,但到目前为止一直找不到。
示例(python 3.5 async/await 样式):
async def long_task():
for i in range(LARGE_NUMBER):
do_something(i)
if i % 100 == 0:
await asyncio.sleep(0)