Python 监视在队列中写入元素的进程

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))

我正在用python编写GUI

在某些情况下,我想加快一些耗时的TAK,因此我使用了如下多处理:

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的主线程通信并异步告知它们已完成,然后更新进度条。。。。。