Как организовать многопоточность для запуска subprocess?
Есть необходимость запускать subprocess в потоках с контролируемым количеством потоков, с возможность добовлять задания на лету.
Пока реализовано так, запускаю количество process из модуля multiprocessing равное количеству процессов, кидаю в очередь задачи которые необходимо выполнять, как задачи кончились потоки умерли, запускаю новые задачи смотрю предыдущие потоки is_alive(), если мертвые убиваю terminate() и запускаю потоки заново, если новые задачи добавились предыдущие еще не отработали то они просто ставятся в очередь и выполняются старыми потоками, так как они еще не умерли.
map не устраивает тем, что нет возможности добавить новые задачи, только создав новый pool.
Есть ли решение более рациональное ? Для запуска нескольки subprocess с контролируемым количеством потоков и возможность пополнения задачами которые необходимо запустить. Данные из subprocess не требуются, просто запустить в асинхроне
Необходимо дергая маршрут flask, запускать python скрипты в параллель, дернув еще раз необходимо заново перезапустить скрипты, но те которые в процессе работы не останавливать
Сергей Горностаев, Использование flask, несет в себе задачу исключительно одну дернуть процессы через веб, на этом функционал его заканчивается, а дальше тупо запускает скрипты задач, больше ничего не требуется, поэтому использование Celery мне кажется будет излишнем
Игорь Статкевич, описанное вами в вопросе - это то же самое, что и Celery, только кустарное и очень плохонькое. Как по мне, избыточно как раз велосипед изобретать.
Сергей Горностаев, тогда может вообще стоит рассмотреть вариант, запустив несколько потоков в режиме daemon и кидать туда задачи с помощью очереди, вызывая скрипты как функции, импортировав перед этим как модуль ?