python多处理进程.连接()等待

2024-06-02 07:30:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python多处理的新手,我一辈子都搞不懂这一点。基本上我有一个任务需要相当长的时间,我需要重复做100次。每次我修改进程的公共资源时。 所以我想批量启动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 = []

这是我是龙凤功能:

^{pr2}$

我得到以下输出:

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

然后程序就永远等在那里。 输出不意味着进程已经运行完毕,应该创建下一批进程吗?我错过了什么。 提前谢谢!很抱歉,如果这是一个愚蠢的问题,我是一个新手:)


Tags: in功能forreturn进程时间批量proc
1条回答
网友
1楼 · 发布于 2024-06-02 07:30:27

下面的代码示例试图模拟您的问题,我成功地执行并返回了程序(Python2.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,因为循环占用了一些连接线程的循环,而不是启动它们,这可能是也可能不是预期的行为。在

相关问题 更多 >