asyncio中的合作收益
问题描述:
我在(龙卷风)网络服务器上运行一个耗时较长的CPU密集型任务。我不想将这个任务卸载到一个线程(现在)。我如何在这个长时间运行的任务中正确地“控制”控制权给事件响应,以便Web请求仍然在服务中(注意:我在协作调度的意义上使用“yield”,而不是生成器意义上的,或python关键字yield
)。asyncio中的合作收益
我的建议是做一个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)
完美!链接到我正在寻找的确切讨论。只要BDFL说这是做到这一点的方法,我很高兴:)。 – Claude