Python asyncio:具有启动延迟的长时间运行任务

Python asyncio:具有启动延迟的长时间运行任务,python,task,delay,sleep,python-asyncio,Python,Task,Delay,Sleep,Python Asyncio,如果有的话,我想用一种更优雅的方式来改善目前的工作环境 我需要启动一组长时间运行的并发任务,其中一些任务会延迟启动 到目前为止,我使用的是gather,并制作了一个小包装函数,将任务包装在asyncio.sleep 包装器如下所示: 异步def包装(延迟、cb、*args、**kwargs): 等待异步睡眠(延迟) 返回cb(*args,**kwargs) 在主要功能中: loop=asyncio.get\u event\u loop() 循环。运行\u直到\u完成(asyncio.gathe

如果有的话,我想用一种更优雅的方式来改善目前的工作环境

我需要启动一组长时间运行的并发任务,其中一些任务会延迟启动

到目前为止,我使用的是
gather
,并制作了一个小包装函数,将任务包装在
asyncio.sleep

包装器如下所示:

异步def包装(延迟、cb、*args、**kwargs):
等待异步睡眠(延迟)
返回cb(*args,**kwargs)
在主要功能中:

loop=asyncio.get\u event\u loop()
循环。运行\u直到\u完成(asyncio.gather(
即时协同程序(),
包装器(2.0,包装的\u协同程序)
))
我发现,
call\u later
可能很有用,但它不希望使用异步函数作为回调函数


对于这种启动延迟的情况,是否有更好的异步处理任务的方法?

包装的最后一行应该包含一个等待
返回等待cb(*args,**kwargs)

对于这种启动延迟的情况,是否有更好的异步IO处理任务的方法

修复了上面的错误后,您应该这样做。一个可能需要改进的地方是,
wrapper
不需要接受回调和参数,它可以接受一个协同路由对象(或者任何类型的等待对象)。这是安全的,因为当您调用协程函数时,协程不会开始运行,而只在事件循环驱动结果对象时才开始运行

生成的API更简单,更接近asyncio提供的API:

async def wrapper(delay, coro):
    await asyncio.sleep(delay)
    return await coro
用法:

loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.gather(
    immediate_coroutine(),
    wrapper(2.0, wrapped_coroutine())
))