为什么在这种多进程情况下队列不能用于通信
why the queue can not works for communication in this multiprocess case
下面的代码是关于两个子进程之间通过队列进行通信的。我无法弄清楚为什么 self.q.qsize() 为零并且 self.q.get() 在函数 "ACT" 中被阻塞???....因为计数器显示队列是满...
#!/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"
您需要使用multiprocessing.Queue
。
Queue.Queue
用于线程使用。 现在您正在每个进程中创建和使用单独的队列实例 - 没有逻辑来促进进程间multiprocessing.Queue
提供的通信。
multiprocessing.Queue
反映了大多数 Queue.Queue
方法,但您必须删除 join
方法调用,如果在 OS X 上,则可能 qsize
。
下面的代码是关于两个子进程之间通过队列进行通信的。我无法弄清楚为什么 self.q.qsize() 为零并且 self.q.get() 在函数 "ACT" 中被阻塞???....因为计数器显示队列是满...
#!/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"
您需要使用multiprocessing.Queue
。
Queue.Queue
用于线程使用。 现在您正在每个进程中创建和使用单独的队列实例 - 没有逻辑来促进进程间multiprocessing.Queue
提供的通信。
multiprocessing.Queue
反映了大多数 Queue.Queue
方法,但您必须删除 join
方法调用,如果在 OS X 上,则可能 qsize
。