在使用multiprocessing
python 中的模块处理项目时,我观察到一些奇怪的行为。
假设我的主程序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*/
在这种情况下,进程不会退出并继续运行,直到线程运行。有什么解释吗?