如何在python中生成一个全新的Process

时间:2015-11-06 08:23:55

标签: python multiprocessing

我想在子流程中调用python函数,而不创建当前流程的副本。

我有一个方法B.run(),应该多次调用A.run()ProcessPoolExecutor消耗大量内存,因此我不想使用subprocess.Popen,因为它会复制整个内存AFAIK。 我也不想使用B.py,因为它对我有几个缺点:

  • 仅将字符串作为参数传递
  • 无法利用例外
  • 我必须完全了解PYTHONPATH的位置,而不是依赖B.run()

我也不想生成线程,因为Tuple很容易崩溃,我不希望它影响父进程。

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

编辑1: 一些问题的答案:

  • 如果我理解正确,我不需要第一个python进程的上下文。
  • 我无法重用进程,因为我调用的是一个带有静态变量的C ++库,需要将其销毁。

1 个答案:

答案 0 :(得分:0)

大多数Unix操作系统在分叉新进程时都在使用Copy-On-Write。

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

您看到进程具有相同的内存量,因为它们使用 量的虚拟内存,但是当涉及到物理内存时,父进程内存实际上是在所有人都分享了独特的副本。

如果我认为正确并且孩子们的过程根本没有触及父母的记忆,那么你只是在浪费时间去反对Unix设计原则。

More info here.