Как запустить отдельный скрипт в субпроцессах, получив интерфейс типа concurrent.futures.Executor?
Решаемая задача: вынести в дочерние процессы CPU-bound нагрузку, чтобы не тормозить ей основной асинхронный процесс.
Как я понимаю, обычные механизмы мультпроцессности питона создают клон запускающего процесса, и уже в этом клоне находят и запускают указанную целевую функцию. Но в моем случае основной запускающий скрипт 1) тяжелый и 2) импортирует код, который нужно распараллелить, неявным образом. Не факт, что с ним всё заведётся, как надо.
Хотелось бы запустить в качестве дочернего процесса отдельный легковесный скрипт. Но тогда я автоматически оказываюсь ограничен интерфейсом subprocess.Popen или asyncio.subprocess.Process, теряя все милые фишки вроде Executor.submit() и Executor.shutdown().
Колхозить решение на pickle и сокетах (или, того хуже, на пайпах) не очень-то хочется, равно как и тащить в системе MQ-брокера только ради этой задачи.
rPman, основной скрипт тащит несколько тяжёлых модулей типа scipy. Они будут импортированы и в клон, порождённый мультипроцессингом. Хотя я могу попробовать завернуть импорты и объявление классов в тело программы, т.е. что-то типа.
Но проблема в том, что worker_func() находится глубоко в одном из моих модулей, которые я подключаю динамически через importlib. Я пока ещё пишу прототип, который позволит проверить, помешает это или нет.