В настоящее время я выполняю бесконечные задачи, используя asyncio.wait
Мне нужна специальная функция для запуска, когда все остальные включены await
import asyncio
async def special_function():
while True:
# does some work,
# Passes control back to controller to run main_tasks
# if they are no longer waiting.
await asyncio.sleep(0)
async def handler():
tasks = [task() for task in main_tasks]
# Adding the task that I want to run when all main_tasks are awaiting:
tasks.append(special_function())
await asyncio.wait(tasks)
asyncio.get_event_loop().run_until_complete(handler())
Как заставить special_function
запускаться только тогда, когда все main_tasks
включены await
?
Edit:
Что я имею в виду под "все main_tasks
включены await
": все main_tasks
не готовы к продолжению, например, находятся в asyncio.sleep(100)
или связаны с вводом-выводом и все еще ожидают данных.
Следовательно, main_tasks
не может продолжаться, и цикл обработки запускает special_function
, пока задачи находятся в этом состоянии, а НЕ на каждой итерации цикла события.
Редактировать 2:
Мой вариант использования:
main_tasks
обновляет структуру данных новыми данными из веб-сокетов.
special_function
передает эти данные другому процессу по сигналу обновления от этого процесса. (multiprocessing
с общими переменными и структурами данных)
Это должны быть самые свежие данные, которые могут быть при передаче, не должно быть ожидающих обновлений от main_tasks.
Именно поэтому я хочу запускать special_function только тогда, когда нет main_tasks с новыми данными, доступными для обработки. (т. е. все ожидают await
)