У меня есть программа, которая запрашивает таблицу в базе данных postgres, затем разбивает результат запроса на группы и загружает каждую группу в BLOB-объект Azure. Загрузка BLOB-объектов выполняется с использованием concurrent.futures.ThreadPoolExecutor
и управляется с помощью цикла событий asyncio
.
Грубо говоря, логика выглядит примерно так:
processes = []
loop = asyncio.get_event_loop()
for b in blobs:
processes.append(loop.run_in_executor(executor, uploadfunction, *args))
commands = asyncio.gather(*processes)
results = loop.run_until_complete(commands)
Эта загрузка большого количества данных является многопоточной, но теперь я хотел бы запустить этот процесс сразу для нескольких таблиц. Ранее я использовал asyncio
для создания нескольких процессов, например, с create_subprocess_shell
. (Мне нужно использовать отдельные процессы для подключения к postgres.)
Могу ли я создать новый сценарий для вызова многих процессов и одновременного их запуска? В частности, является ли цикл событий asyncio
в каждом процессе приватным для этого процесса , или будут проблемы с каждым процессом, пытающимся редактировать цикл событий? И будет ли «главный цикл обработки событий», управляющий подпроцессами, также отдельным?