Я не очень опытен в Python asyncio, хотя синхронный Python идет хорошо. У меня есть функция, которая создает список задач, и другая функция, которая должна вызываться с задачами в этом списке:
import asyncio
async def createTasks(some_dict):
coroutines = []
# some_dict can have an arbitrary number of items
for item in some_dict:
coroutines.append(executeOneTask(item))
tasks = await asyncio.gather(*coroutines, return_exceptions=True)
return tasks
async def executeOneTask(item):
# execute a task asynchronously
return
Здесь вы можете исправить меня, если я ошибаюсь.
Теперь я понимаю, что asyncio мне нужно событие l oop для выполнения асинхронной функции, что означает, что для asyncio.gather
мне нужно await
это, что означает, что это должно происходить внутри async
функция. Итак, мне нужно событие l oop для создания моего списка асинхронных задач, которые я действительно хочу выполнять асинхронно.
Если мое понимание циклов событий верно, я не могу легко добавить задачи внутри события l oop к тому же событию l oop. Давайте предположим, что у меня есть асинхронная функция main()
, которая должна сначала получить список асинхронных задач, используя createTasks()
, а затем создать сумму (равную list длина) асинхронные задачи, выполняемые с использованием executeOneTask()
.
Как мне подойти к построению такой main()
функции? Мне нужно несколько циклов событий? Могу ли я создать список задач другим способом, который позволяет упростить код?
Примечание: выбранный мной подход может быть очень сложным или перевернутым способом решения проблемы. Я хочу создать список асинхронных задач и затем выполнить их асинхронно. Не стесняйтесь не следовать приведенной выше структуре кода, если интеллектуальное решение требует этого.
Спасибо!