Python 从Pylons调用的Process()创建一个fork

Python 从Pylons调用的Process()创建一个fork,python,pylons,multiprocessing,Python,Pylons,Multiprocessing,我正在尝试创建一个背景流程,用于从主挂架流程进行一些繁重的计算。代码如下: p = Process(target = instance_process, \ args = (instance_tuple.instance, parent_pipe, child_pipe,)) p.start() 进程已经创建并启动,但似乎是主进程的分支:它正在侦听同一端口,整个应用程序挂起。我做错了什么 提前感谢。过程是一个分叉。如果仔细查看它的实现,您会发现P

我正在尝试创建一个背景流程,用于从主挂架流程进行一些繁重的计算。代码如下:

    p = Process(target = instance_process, \
                args = (instance_tuple.instance, parent_pipe, child_pipe,))
    p.start()
进程已经创建并启动,但似乎是主进程的分支:它正在侦听同一端口,整个应用程序挂起。我做错了什么


提前感谢。

过程是一个分叉。如果仔细查看它的实现,您会发现
Process.start()
调用fork。但是,它不会调用任何
exec
变体来更改执行上下文

不过,这可能与侦听同一端口无关(除非父进程是多线程的)。程序在哪一点挂起? 我知道,当您尝试关闭python程序而不终止通过多处理创建的子进程时,它将一直挂起,直到子进程终止。
例如,如果不关闭进程之间的管道,可能会导致此问题。

进程是一个分支。如果仔细查看它的实现,您会发现
Process.start()
调用fork。但是,它不会调用任何
exec
变体来更改执行上下文

不过,这可能与侦听同一端口无关(除非父进程是多线程的)。程序在哪一点挂起? 我知道,当您尝试关闭python程序而不终止通过多处理创建的子进程时,它将一直挂起,直到子进程终止。
例如,如果不关闭进程之间的管道,可能会导致此问题。

那么启动后台进程的最佳方法是什么?或者,开始一个线程更好?目标是创建一个进程/线程,该进程/线程将等待传入的命令,并在相当长的时间内执行一些繁重的计算。Python解释器一次只运行一个执行线程,每100个命令(确切地说)在线程之间切换,而print将挂起整个过程(阅读Python)。我不建议使用Python线程。至于进程,您只需在计算完成后使用
p.terminate()
p.join()
即可。这些计算可能涉及大量数据(500-700 Mb),如果每次用户想对其进行操作时都加载这些数据,那就不太好了。使用subprocess.Popen()函数启动流程是什么?如果没有特定的问题,很难提出特定的解决方案。Popen通常用于调用第三方程序,并将其标准输出放入程序中的文件描述符中。主要的问题是你希望这个过程做什么…我需要我的过程成为一个在线计算机辅助工程系统的计算实例,也就是说,它应该能够加载初始数据,在不阻塞主挂架线程的情况下执行诸如网格构建和机械计算之类的计算。那么,启动后台进程的最佳方法是什么?或者,开始一个线程更好?目标是创建一个进程/线程,该进程/线程将等待传入的命令,并在相当长的时间内执行一些繁重的计算。Python解释器一次只运行一个执行线程,每100个命令(确切地说)在线程之间切换,而print将挂起整个过程(阅读Python)。我不建议使用Python线程。至于进程,您只需在计算完成后使用
p.terminate()
p.join()
即可。这些计算可能涉及大量数据(500-700 Mb),如果每次用户想对其进行操作时都加载这些数据,那就不太好了。使用subprocess.Popen()函数启动流程是什么?如果没有特定的问题,很难提出特定的解决方案。Popen通常用于调用第三方程序,并将其标准输出放入程序中的文件描述符中。主要的问题是你希望这个过程做什么…我需要我的过程成为一个在线计算机辅助工程系统的计算实例,也就是说,它应该能够加载初始数据,执行计算,如网格构建和机械计算,而不会阻塞主塔线程。