为什么在这个多进程的情况下队列不能用于通信

时间:2016-05-18 15:04:37

标签: python queue multiprocess

以下代码是关于队列之间两个子进程之间的通信。我无法弄清楚为什么self.q.qsize()为零并且在函数“ACT”中阻止了self.q.get()......因为计数器显示队列已满。 ..

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from multiprocessing import Process
import multiprocessing
import time
from Queue import Queue

class Test():
    def __init__(self):
        self.q = Queue(1)

    def ACT(self):
        while True:
            print "B momoent queue size: %s" %self.q.qsize()
            print self.q.get()
            time.sleep(1)

    def counter(self):
        for i in range(5,10):
            if not i == 5:
                print "Hello1"
            print self.q.full()
            self.q.join()
            print "Hello2"
            self.q.put(str(i))
            print "A moment queue size: %s" % self.q.qsize()         
if __name__ == '__main__':

    foo = Test()
    qw = Process(target=foo.counter)   
    qw.start()

    qr = Process(target=foo.ACT)
    qr.start()

    qw.join()
    print "End"

1 个答案:

答案 0 :(得分:0)

您需要使用multiprocessing.Queue

Queue.Queue用于线程使用。现在您正在每个进程中创建和使用单独的队列实例 - 没有逻辑来促进进程间通信{{1提供。

multiprocessing.Queue反映了大多数multiprocessing.Queue方法,但如果在OS X上,则必须删除Queue.Queue方法调用,可能还需要join