如果有的话,我想以更优雅的方式改善目前的工作状况。在
我需要启动一组长时间运行的并发任务,其中一些任务以延迟开始。在
到目前为止,我使用的是gather
,并制作了一个小的包装函数,在asyncio.sleep
之后包装任务
包装如下:
async def wrapper(delay, cb, *args, **kwargs):
await asyncio.sleep(delay)
return cb(*args, **kwargs)
在主要功能中:
^{pr2}$我发现call_later
可能很有用,但它不希望使用异步函数作为回调函数。在
对于这种启动延迟的情况,有没有更好的方法来处理异步任务?在
wrapper
的最后一行应该包含一个await:return await cb(*args, **kwargs)
。在上面的错误修正了,这就是你应该怎么做的。一个可能需要改进的地方是
wrapper
不需要接受回调和参数,它可以接受一个协程对象(或者任何类型的等待对象,真的)。这是安全的,因为当您调用协程函数时,协程不会开始运行,而只在事件循环驱动结果对象时才开始运行。在生成的API稍微简单一些,更接近asyncio提供的API:
用法:
^{pr2}$相关问题 更多 >
编程相关推荐