Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中生成一个全新的进程_Python_Multiprocessing - Fatal编程技术网

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

如何在python中生成一个全新的进程,python,multiprocessing,Python,Multiprocessing,我希望在子进程中调用python函数,而不创建当前进程的副本 我有一个方法a.run,它应该多次调用B.run。 run会消耗大量内存,所以我不想使用ProcessPoolExecutor,因为它会自动复制整个内存。 我也不想使用subprocess.Popen,因为它对我有几个缺点: 仅将字符串作为参数传递 不能利用异常 我必须准确地知道B.py的位置,而不是依赖PYTHONPATH 我也不想产生线程,因为B.run很容易崩溃,我不希望它影响父进程 我是否忽略了一种方法,它的优点是产生单独的进

我希望在子进程中调用python函数,而不创建当前进程的副本

我有一个方法a.run,它应该多次调用B.run。 run会消耗大量内存,所以我不想使用ProcessPoolExecutor,因为它会自动复制整个内存。 我也不想使用subprocess.Popen,因为它对我有几个缺点:

仅将字符串作为参数传递 不能利用异常 我必须准确地知道B.py的位置,而不是依赖PYTHONPATH 我也不想产生线程,因为B.run很容易崩溃,我不希望它影响父进程

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

编辑1: 对一些问题的答复:

如果我理解正确,我不需要第一个python进程的上下文。 我无法重用进程,因为我调用一个具有静态变量的C++库,它们需要被销毁。
大多数Unix操作系统在分叉新进程时都使用写时拷贝

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

您可以看到,由于进程使用了相同数量的虚拟内存,因此它们具有相同数量的内存,但当涉及到物理内存时,父进程内存实际上位于它们之间共享的唯一副本中

如果我假设正确,并且子进程根本没有触及父进程的内存,那么您就是在浪费时间违反Unix设计原则


你想让第一个python进程的上下文在新的python进程中可用吗?看看你说的,你唯一的选择是在分离的线程上运行B,并手动处理它们何时结束。你能在A.run的克隆位之前创建ProcessPoolExecutor吗?甚至可能在.run启动之前创建它,并将其作为参数传入?@hamsolo474:我将尝试spawn方法,它听起来正是我想要的。