2017-05-03 4 views
0

을 멀티 것은 내 코드파이썬에서 프로세스의 스레드에서 파이프 연결 객체에 액세스하는 방법은 무엇입니까? <code>bcd()</code>이 스레드, <code>p.recv()</code> 나던 인쇄 아무것도 시작할 때 다음

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

입니다. 그러나 pabc()에서 액세스하려고하면 p.recv()이 작동하고 test이 인쇄됩니다. 누군가이 행동을 설명 할 수 있습니까?

+0

가'대상 = BCD를 BCD하기 위해 인수 = (p,)' –

답변

1

시작하려면 timeslice을 지정하려면 time.sleep(...)을 추가해야합니다.
둘째, 보류에 도달 print(p.recv())을 excute에하는 def abc(...) 오래 살아def bcd(...) 같은 요구를 가지고있다.

이 의지 예를 들어, 나를 위해 일하는 :

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

파이썬으로 테스트 : 내가 통과 3.4.2과 2.7.9