我正在(龙卷风)网络服务器上运行一项耗时长的CPU任务。我不想将此任务卸载到一个线程(现在)。如何在这个长时间运行的任务中正确地“控制”对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)