2015-11-06 3 views
0

Я хочу вызвать функции python в подпроцессах без создания копии текущего процесса.Как создать совершенно новый процесс в python

У меня есть метод A.run(), который должен позвонить по телефону B.run() несколько раз. A.run() потребляет много памяти, поэтому я не хочу использовать ProcessPoolExecutor, потому что он копирует всю память AFAIK. Я также не хочу использовать subprocess.Popen, поскольку он имеет несколько недостатков для меня:

  • только передавать строки в качестве параметров
  • не могут воспользоваться исключениями
  • Я должен знать местоположение B.py точно, вместо полагаться на PYTHONPATH

Я также не хочу, чтобы породить потоки, потому что B.run() падает легко, и я не хочу, чтобы это осуществить родительский процесс.

Есть ли способ, которым я упускал из виду то, что имеет преимущество размножения отдельных процессов, без дополнительной памяти, но с преимуществами вызова метода python?

Edit 1: Ответы на некоторые вопросы:

  • Если я понимаю правильно, мне не нужны контекст первого процесса питона.
  • Я не могу повторно использовать процессы, потому что я называю библиотеку C++, которая имеет статические переменные, и их нужно уничтожить.
+0

вы хотите иметь контекст первого процесса питона будет доступен в новом процессе питона ли? –

+0

Ищете то, что вы говорите, ваш единственный вариант запускается B на отдельных потоках и обрабатывается всякий раз, когда они заканчиваются вручную. – Netwave

+0

Не могли бы вы создать «ProcessPoolExecutor» перед клонированными битами 'A.run'? Возможно, создайте его до того, как 'A.run' начнет работать, и передайте его как параметр? – Blckknght

ответ

0

Большинство операционных систем Unix используют Copy-On-Write, когда они развивают новые процессы.

Это означает, что если память не изменяется дочерними процессами, память не дублируется, а совместно используется.

Вы видите, что процессы имеют одинаковый объем памяти из-за того, что они используют , что сумма виртуальной памяти равна, но когда дело доходит до физического, родительская память процесса фактически находится в уникальной копии, торговый центр.

Если я предполагаю, что права и процессы детей не касаются памяти родителя вообще, тогда вы просто тратите свое время на разработку принципов проектирования Unix.

More info here.

Смежные вопросы