Задать вопрос
Vindicar
@Vindicar
RTFM!

Как запустить отдельный скрипт в субпроцессах, получив интерфейс типа concurrent.futures.Executor?

Решаемая задача: вынести в дочерние процессы CPU-bound нагрузку, чтобы не тормозить ей основной асинхронный процесс.

Как я понимаю, обычные механизмы мультпроцессности питона создают клон запускающего процесса, и уже в этом клоне находят и запускают указанную целевую функцию. Но в моем случае основной запускающий скрипт 1) тяжелый и 2) импортирует код, который нужно распараллелить, неявным образом. Не факт, что с ним всё заведётся, как надо.

Хотелось бы запустить в качестве дочернего процесса отдельный легковесный скрипт. Но тогда я автоматически оказываюсь ограничен интерфейсом subprocess.Popen или asyncio.subprocess.Process, теряя все милые фишки вроде Executor.submit() и Executor.shutdown().
Колхозить решение на pickle и сокетах (или, того хуже, на пайпах) не очень-то хочется, равно как и тащить в системе MQ-брокера только ради этой задачи.

Что можете посоветовать?
  • Вопрос задан
  • 47 просмотров
Подписаться 2 Сложный 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы