Rahul
Rahul

Reputation: 11669

How to communicate between process in real time?

I have two processes and the data of one process has to be communicated to the other. I wrote a basic queue in order to communicate in real time but it doesn't serve the purpose.

The following is example code:

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

The expected output was 0 1 2 3 4, but I only get 0. How can I resolve this?

Upvotes: 0

Views: 599

Answers (2)

C&#233;dric Julien
C&#233;dric Julien

Reputation: 80761

try with this version :

def t():
    while True:
        try:
            print q.get(timeout=1)
        except:
            break

Upvotes: 1

jtniehof
jtniehof

Reputation: 601

You're only calling get() once. It returns one item at a time.

(As an aside, your function f is very non-Pythonic, ty:

def f(name):
    for i in range(4):
        q.put(i)

You're also using q as a global...

Upvotes: 1

Related Questions