2017-05-03 49 views
0

以下是我的代碼如何在python中的進程的線程中訪問管道連接對象?多處理

from multiprocessing import Process,Queue,Pipe 
from threading import Thread 
import time 

p,q = Pipe() 
def bcd(p): 
    print p.recv() 

def abc(p): 
    t1 = Thread(target=bcd,args=(p,)) 
    t1.daemon = True 
    t1.start() 

p1 = Process(target=abc,args=(p,)) 
p1.start() 

time.sleep(3) 
q.send('test') 

bcd()開始作爲一個線程,p.recv()犯規打印任何東西。 但是,當我嘗試從abc()訪問p, p.recv()作品和打印test。有人可以解釋這種行爲嗎?

+0

我已經通過了它BCD'目標= BCD,ARGS =(p,)' –

回答

1

您必須添加一些time.sleep(...)才能啓動timeslice
其次,你必須保持def abc(...)只要活着需要def bcd(...)達到和EXCUTE print(p.recv())

這將工作對我來說,比如:

def bcd(p): 
    print(p.recv()) 
    time.sleep(0.1) 

def abc(p): 
    t1 = Thread(target=bcd,args=(p,)) 
    #t1.daemon = True 
    t1.start() 

    while True: 
     time.sleep(3) 

if __name__ == '__main__': 
    p,q = Pipe() 
    p1 = Process(target=abc,args=(p,)) 
    p1.start() 

    time.sleep(3) 
    q.send('test') 

    p1.join(4) 
    p1.terminate() 
    print('EXIT main') 

測試使用Python 3.4.2和2.7.9