0

在使用multiprocessingpython 中的模块处理项目时,我观察到一些奇怪的行为。

假设我的主程序p1使用模块创建了一个进程p2 。multiprocessing进程p2自己创建了一个名为p2_t1的线程。创建此线程后p2中没有代码块,因此它退出(我没有调用退出,所以它只会从 main 返回)留下p2_t1悬空。我可以通过以下方式确认strace

p1中创建子进程的示例代码

p = Process(target=RunService,args=(/*some args*/),name="p2")

p2的示例代码:

def RunService():
    try:
        /*do something here*/
    except Exception,e:
        /*create a new thread*/

    /*nothing here so basically this process exits leaving the thread dangling*/

但是,如果在p1中创建线程(调用是p1_t1),则不会发生这种情况。p1在创建的线程p1_t1运行之前不会退出。

本例中p1的示例代码

try:
  /*do something here*/
except Exception,e:
  /*create a new thread*/

    /*nothing here so basically process should end*/

在这种情况下,进程不会退出并继续运行,直到线程运行。有什么解释吗?

4

1 回答 1

0

没有任何代码可言,很难说出发生了什么,但我会尝试让你的线程成为守护线程,然后用 p2 等待它。当线程完成时,p2 应该正确关闭,终止线程。像这样的东西:

t1 = threading.Thread(target=somefunc, args=((2,)))
t1.setDaemon(True)
t1.start()
t1.join()

祝你好运,迈克

于 2012-11-16T16:09:44.240 回答