Я бы хотел улучшить текущую рабочую ситуацию более элегантно, если она есть.
Мне нужно запустить ряд длительных параллельных задач, некоторые из которых начинаются с задержкой.
Пока что я использую gather
и создал небольшую функцию-обертку, которая оборачивает задачу после asyncio.sleep
Обёртка выглядит следующим образом:
async def wrapper(delay, cb, *args, **kwargs):
await asyncio.sleep(delay)
return cb(*args, **kwargs)
А в основной функции:
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.gather(
immediate_coroutine(),
wrapper(2.0, wrapped_coroutine)
))
Я обнаружил, что call_later
может быть полезным, но он не ожидает асинхронную функцию в качестве своего обратного вызова.
Есть ли лучший способ обработки задач с помощью asyncio для таких случаев задержки запуска?