Многопоточность и многопроцессорность с помощью asyncio - PullRequest
0 голосов
/ 17 января 2019

У меня есть программа, которая запрашивает таблицу в базе данных 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 в каждом процессе приватным для этого процесса , или будут проблемы с каждым процессом, пытающимся редактировать цикл событий? И будет ли «главный цикл обработки событий», управляющий подпроцессами, также отдельным?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...