2017-09-04 60 views
0

몇 가지 하위 프로세스에서 일부 계산을 실행 한 다음 그 결과를 주 프로세스 (예 : PyQt ui 업데이트)로 보낼 수는 있지만 프로세스가 여전히 실행 중입니다. 데이터를 다시 보내고 ui를 다시 업데이트하는 동안? multiprocessing.queue를 사용하면 프로세스가 종료 된 후에 만 ​​데이터를 다시 보낼 수있는 것처럼 보입니다. 그래서이 사건이 가능한지 아닌지 궁금합니다. 미리 감사드립니다!Python 다중 처리 - 자식 프로세스가 지속적으로 결과를 보내고 계속 실행 중임

답변

1

"multiprocessing.queue를 사용하면 프로세스가 종료 된 후에 만 ​​데이터를 다시 보낼 수있는 것 같습니다."라는 것이 무슨 뜻인지 알 수 없습니다. 이것은 Multiprocessing.Queue가 설계된 유스 케이스입니다.

PyMOTW는 다중 처리 (Multiprocessing)를 포함한 Python 모듈의 전체로드에 훌륭한 리소스입니다. 여기 체크 아웃 : https://pymotw.com/2/multiprocessing/communication.html

멀티 및 루프를 사용하여 부모에게 아이에서 지속적으로 메시지를 전송하는 방법의 간단한 예 :

import multiprocessing 

def child_process(q): 
    for i in range(10): 
     q.put(i) 
    q.put("done") # tell the parent process we've finished 

def parent_process(): 
    q = multiprocessing.Queue() 
    child = multiprocessing.Process(target=child_process, args=(q,)) 
    child.start() 
    while True: 
     value = q.get() 
     if value == "done": # no more values from child process 
      break 
     print value 
     # do other stuff, child will continue to run in separate process 
+0

난 이해가 확실하지 않다. 완료하는 데 일정 시간 이상이 걸리면 프로세스를 종료하고 싶습니까? 그것이 원하는 것이라면 신호 패키지의 signal.alarm을 봐야합니다. https://docs.python.org/2/library/signal.html – wolfson109

+0

감사합니다! 그래서 자식 프로세스의 결과를 기다리지 않고 결과를 얻고 싶다면 상황이 궁금합니다. 하위 프로세스는 항상 실행되며 데이터를 지속적으로 전송합니다. 그게 가능하니? – nmvhs

+0

예, 새로운 값을 생성 할 때마다 queue.put을 호출하는 루프에서 자식 프로세스를 실행하면됩니다. 그런 다음 부모 스레드는 매번 queue.get을 호출하는 다른 루프를 실행할 수 있습니다. – wolfson109