2015-11-06 157 views
0

一个全新的过程我想调用子流程蟒蛇功能,而无需创建当前进程的副本。如何产卵在python

我有一个方法A.run()它应该多次呼叫B.run()A.run()消耗大量的内存,所以我不希望使用ProcessPoolExecutor,因为它复制了整个内存AFAIK。 我也不想用subprocess.Popen,因为它有几个缺点对我说:

  • 只传递一个字符串作为参数
  • 不能采取例外的优势
  • 我必须知道的B.py位置准确,而不是依托PYTHONPATH

我也不想生成线程,因为B.run()崩溃容易,我不希望它影响父进程。

有没有一种方式我忽略了它的优点是产生单独的进程,没有额外的内存,但有调用python方法的好处?

编辑1: 解答一些问题:

  • 如果我理解正确的这个,我不需要第一蟒蛇进程的背景下。
  • 因为我称之为具有静态变量一个C++库,他们需要被破坏,我不能再利用过程。
+0

您是否想让第一个python进程的上下文在新的python进程中可用? –

+0

寻找你说的唯一选择是在分离的线程上运行B,并在手动结束时进行处理 – Netwave

+0

你可以在'A.run'的clostly位之前创建'ProcessPoolExecutor'吗?也许创建之前'A.run'甚至开始,并在将它作为一个参数? – Blckknght

回答

0

大多数Unix操作系统在分叉新进程时正在使用写时复制(Copy-On-Write)。

这意味着,如果内存未被进程子进程更改,则内存不会被重复但共享。

你看有相同的内存量的过程,由于它们使用的虚拟内存,但是当涉及到物理之一,父进程的内存实际上是在共享的唯一副本的事实商场。

如果我认为正确,并且子进程根本没有触及父进程的内存,那么您只是在浪费自己的时间,违背Unix设计原则。

More info here.