我有两个流程,一个流程的数据必须传达给另一个流程。我写了一个基本队列,以便实时沟通,但它没有达到目的。
以下是示例代码:
from multiprocessing import Process , Pipe , Queue
a , b = Pipe()
q = Queue()
def f(name):
i = 0
while i < 4:
q.put(i)
i += 1
def t():
print q.get()
if __name__ == '__main__':
p = Process(target=f, args=('bob',))
p.start()
p.join()
p1 = Process(target=t, args= (''))
p1.start()
p1.join()
预期输出为0 1 2 3 4
,但我只获得0
。
我该如何解决这个问题?
答案 0 :(得分:1)
你只需要调用一次get()。它一次返回一个项目。
(顺便说一下,你的函数f非常非Pythonic,ty:
def f(name):
for i in range(4):
q.put(i)
你也在使用q作为全球......
答案 1 :(得分:1)
尝试使用此版本:
def t():
while True:
try:
print q.get(timeout=1)
except:
break