Я создаю программу, которая rsync передает данные с нескольких удаленных станций (~ 200). Иногда существует несколько файлов на станцию и группы станций, с которыми НЕ следует связываться одновременно, иначе соединение будет закрыто. В настоящее время у меня есть асинхронная подпрограмма (использующая asyncio в python), которая асинхронно rsync передает все файлы одновременно (на соответствующие станции). Это приводит к закрытию соединения, если мы получаем отставание файлов или связываемся со станциями, которые находятся в той же группе в то же время.
Что мне нужно сделать, это создать сгруппированные задачи, где в группе станций она ожидает обновления предыдущего файла (updateFile ()) перед запуском следующего файла, но асинхронно запускает все группы станций вв то же время.
Новичок в асинхронном программировании, и я просто не могу понять, как заставить эту проблему работать.
В настоящее время мне удалось запустить все асинхронно.
Стартовый цикл
loop = asyncio.get_event_loop()
Создание сгруппированных задач станций и отдельных задач станций
tasks=[]
for group, files in file_groups.items():
files_in_task = []
for order, fqdn, file in files:
if group == 'none':
futures = [updateFile(file, fqdn)]
tasks.append(asyncio.gather(*futures))
else: # In Group
x = (file, fqdn)
files_in_task.append(x)
futures = [updateFile(file,fqdn) for (file,fqdn) in files_in_task]
tasks.append(asyncio.wait(*futures))
Запуск цикла событий, пока не будут возвращены все задачи.
loop.run_until_complete(asyncio.wait(tasks))
loop.close()