Обновленный вопрос
У меня есть следующий код Python, который использует внешнюю команду для обработки несколько элементов (обычно от 50 до 500) последовательно. Я хочу ускорить обработку, вызвав внешнюю команду в 5 параллельных экземплярах. Я думал об использовании asyncio или потоков, но не могу понять, как запустить следующий экземпляр после завершения одного из 5 внешних вызовов.
Код: Выделить всё
import subprocess
params = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
program = '/path/to/external/program'
def main():
for param in params:
subprocess.run([program, param])
if __name__ == "__main__":
main()
Оригинальный вопрос
Я ищу хорошее решение для обработки больших пакетов (от 50 до 500) сообщений, полученных из Google PubSub и затем обработайте их с помощью 5 параллельных экземпляров внешней программы. Выполнять обработку на Python экономически нецелесообразно, поскольку внешняя программа уже существует и хорошо протестирована.
У меня средний уровень знаний по программированию на Python, но не по асинхронному программированию.
Я думал об использовании asyncio. Могу ли я создать пул из 5 экземпляров asyncio.create_subprocess_exec, и всякий раз, когда завершается одна внешняя программа, запускается другая? Как мне получить информацию о том, что внешняя программа завершила работу?
Скажите, пожалуйста, не стоит ли вообще использовать для этого asyncio.
Подробнее здесь: https://stackoverflow.com/questions/789 ... ubsub-mess