如何实时进行流程沟通?

时间:2011-05-02 15:42:29

标签: python

我有两个流程,一个流程的数据必须传达给另一个流程。我写了一个基本队列,以便实时沟通,但它没有达到目的。

以下是示例代码:

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。 我该如何解决这个问题?

2 个答案:

答案 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