异步:具有启动延迟的长时间运行任务

2024-03-29 12:36:17 发布

您现在位置:Python中文网/ 问答频道 /正文

如果有的话,我想以更优雅的方式改善目前的工作状况。在

我需要启动一组长时间运行的并发任务,其中一些任务以延迟开始。在

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

包装如下:

async def wrapper(delay, cb, *args, **kwargs):
    await asyncio.sleep(delay)
    return cb(*args, **kwargs)

在主要功能中:

^{pr2}$

我发现call_later可能很有用,但它不希望使用异步函数作为回调函数。在

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


Tags: 函数asyncioasyncdef方式时间argssleep
1条回答
网友
1楼 · 发布于 2024-03-29 12:36:17

wrapper的最后一行应该包含一个awaitreturn await cb(*args, **kwargs)。在

Is there a better way of handling tasks with asyncio for such cases of start delay?

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

生成的API稍微简单一些,更接近asyncio提供的API:

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

用法:

^{pr2}$

相关问题 更多 >