Python 监视在队列中写入元素的进程
我正在用python编写GUI 在某些情况下,我想加快一些耗时的TAK,因此我使用了如下多处理:Python 监视在队列中写入元素的进程,python,queue,multiprocessing,monitoring,Python,Queue,Multiprocessing,Monitoring,我正在用python编写GUI 在某些情况下,我想加快一些耗时的TAK,因此我使用了如下多处理: resultsQueue = multiprocessing.Queue() p1 = multiprocessing.Process(target=proc1, args=(some_arguments, resultsQueue)) p2 = multiprocessing.Process(target=proc2, args=(some_arguments, resultsQueue))
resultsQueue = multiprocessing.Queue()
p1 = multiprocessing.Process(target=proc1, args=(some_arguments, resultsQueue))
p2 = multiprocessing.Process(target=proc2, args=(some_arguments, resultsQueue))
p3 = multiprocessing.Process(target=proc3, args=(some_arguments, resultsQueue))
p4 = multiprocessing.Process(target=proc4, args=(some_arguments, resultsQueue))
p5 = multiprocessing.Process(target=proc5, args=(some_arguments, resultsQueue))
p1.daemon = True
p2.daemon = True
p3.daemon = True
p4.daemon = True
p5.daemon = True
p1.start()
p2.start()
p3.start()
p4.start()
p5.start()
self.processes += [p1]
self.processes += [p2]
self.processes += [p3]
self.processes += [p4]
self.processes += [p5]
for p in self.processes:
p.join()
def proc1(some_arguments, resultsQueue):
#the long loop here
for i in xrange(....):
#do some calculations
resultsQueue.put(the_result)
resultsQueue.put("Done")
基本上,每个过程都包含在一个大循环中,进行一些计算并将结果放入resultsQueue,类似这样:
resultsQueue = multiprocessing.Queue()
p1 = multiprocessing.Process(target=proc1, args=(some_arguments, resultsQueue))
p2 = multiprocessing.Process(target=proc2, args=(some_arguments, resultsQueue))
p3 = multiprocessing.Process(target=proc3, args=(some_arguments, resultsQueue))
p4 = multiprocessing.Process(target=proc4, args=(some_arguments, resultsQueue))
p5 = multiprocessing.Process(target=proc5, args=(some_arguments, resultsQueue))
p1.daemon = True
p2.daemon = True
p3.daemon = True
p4.daemon = True
p5.daemon = True
p1.start()
p2.start()
p3.start()
p4.start()
p5.start()
self.processes += [p1]
self.processes += [p2]
self.processes += [p3]
self.processes += [p4]
self.processes += [p5]
for p in self.processes:
p.join()
def proc1(some_arguments, resultsQueue):
#the long loop here
for i in xrange(....):
#do some calculations
resultsQueue.put(the_result)
resultsQueue.put("Done")
正如您所看到的,我试图在每个流程的末尾添加一个“标志”,即“完成”
但是,我被卡住了,因为我不知道如何从主GUI监视进程,以便在进程一个接一个结束的同时显示进度条,或显示消息等…为什么不使用共享结构将每个子进程的状态通知给主进程?是的,当然,但是请给我更多的细节,因为我不知道如何继续:D你说的共享结构是什么意思??我需要更多信息:)每个进程最后一次处理的
I
的共享值:谢谢你的评论,但恐怕我仍然看不到如何强制进程与GUI的主线程通信并异步告知它们已完成,然后更新进度条。。。。。