繁体   English   中英

python multiprocessing process.join()永远等待

[英]python multiprocessing process.join() waits forever

我是Python多重处理的新手,我一生无法弄清楚这一点。 基本上,我的任务需要花费很多时间,而我需要重复执行数百次。 每次我修改流程的公共资源。 因此,我想分批启动4个进程,等待它们完成,然后启动下一个4个进程。这是我的主要功能

lock = Lock() #global defined at the start of my file
myObj = MyObj()
processes = []
for num in range(1,100):
    if len(processes) < 5:
        p = Process(target=myObj.longFunc, args =())
        p.start()
        processes.append(p)
    else:
        for proc in processes:
            proc.join()
        processes = []

这是MyObj.longFunc功能:

def longFunc:
    lock.acquire()
    #Do stuff on common resourse which is a multiprocessing.Queue object
    lock.release()
    #Do more stuff
    print 'process should return'
    return 0

我得到以下输出:

process should return
process should return
process should return
process should return
process should return

然后,程序就在这里“永远”等待。 输出是否表示流程已完成运行并且应该创建下一批流程? 我想念什么。 提前致谢! 和抱歉,如果它是一个愚蠢的问题,我是一个新手:)

使用下面的代码示例尝试模仿您的问题,我成功执行并返回了程序(Python 2.7.7):

from multiprocessing import Process, Lock

lock = Lock()

class MyObj():
    def longFunc(self):
        lock.acquire()
        #Do stuff on common resourse which is a multiprocessing.Queue object
        lock.release()
        print "process should return"
        return 0

myObj = MyObj()
processes = []
x = 0

for num in range(1,100):
    if len(processes) < 5:
        p = Process(target=myObj.longFunc, args =())
        p.start()
        processes.append(p)
    else:
        for proc in processes:
            proc.join()
            x += 1
            print x, " joined"
        processes = []

这表明问题不在于启动和连接线程的方式,而在于程序的其他部分。

需要注意的是,我注意到该程序只能80 joined因为您的循环占用了一些连接线程的周期,而不是启动线程,这可能是预期的行为,也可能不是预期的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM