2016-04-15 38 views
1

我在(龙卷风)网络服务器上运行一个耗时较长的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) 

回答

1

它不会在文档中提到,但目前asyncio.sleep(0)是做这种常见的方式。你可以阅读完整的讨论here。另外asyncio.sleep(0)专门做optimized做工作。由于这种情况has test,我想你可能不会害怕行为。

+0

完美!链接到我正在寻找的确切讨论。只要BDFL说这是做到这一点的方法,我很高兴:)。 – Claude