Я хочу вызвать функции python в подпроцессах без создания копии текущего процесса.Как создать совершенно новый процесс в python
У меня есть метод A.run()
, который должен позвонить по телефону B.run()
несколько раз. A.run()
потребляет много памяти, поэтому я не хочу использовать ProcessPoolExecutor
, потому что он копирует всю память AFAIK. Я также не хочу использовать subprocess.Popen
, поскольку он имеет несколько недостатков для меня:
- только передавать строки в качестве параметров
- не могут воспользоваться исключениями
- Я должен знать местоположение
B.py
точно, вместо полагаться наPYTHONPATH
Я также не хочу, чтобы породить потоки, потому что B.run()
падает легко, и я не хочу, чтобы это осуществить родительский процесс.
Есть ли способ, которым я упускал из виду то, что имеет преимущество размножения отдельных процессов, без дополнительной памяти, но с преимуществами вызова метода python?
Edit 1: Ответы на некоторые вопросы:
- Если я понимаю правильно, мне не нужны контекст первого процесса питона.
- Я не могу повторно использовать процессы, потому что я называю библиотеку C++, которая имеет статические переменные, и их нужно уничтожить.
вы хотите иметь контекст первого процесса питона будет доступен в новом процессе питона ли? –
Ищете то, что вы говорите, ваш единственный вариант запускается B на отдельных потоках и обрабатывается всякий раз, когда они заканчиваются вручную. – Netwave
Не могли бы вы создать «ProcessPoolExecutor» перед клонированными битами 'A.run'? Возможно, создайте его до того, как 'A.run' начнет работать, и передайте его как параметр? – Blckknght