몇 가지 하위 프로세스에서 일부 계산을 실행 한 다음 그 결과를 주 프로세스 (예 : PyQt ui 업데이트)로 보낼 수는 있지만 프로세스가 여전히 실행 중입니다. 데이터를 다시 보내고 ui를 다시 업데이트하는 동안? multiprocessing.queue를 사용하면 프로세스가 종료 된 후에 만 데이터를 다시 보낼 수있는 것처럼 보입니다. 그래서이 사건이 가능한지 아닌지 궁금합니다. 미리 감사드립니다!Python 다중 처리 - 자식 프로세스가 지속적으로 결과를 보내고 계속 실행 중임
0
A
답변
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
난 이해가 확실하지 않다. 완료하는 데 일정 시간 이상이 걸리면 프로세스를 종료하고 싶습니까? 그것이 원하는 것이라면 신호 패키지의 signal.alarm을 봐야합니다. https://docs.python.org/2/library/signal.html – wolfson109
감사합니다! 그래서 자식 프로세스의 결과를 기다리지 않고 결과를 얻고 싶다면 상황이 궁금합니다. 하위 프로세스는 항상 실행되며 데이터를 지속적으로 전송합니다. 그게 가능하니? – nmvhs
예, 새로운 값을 생성 할 때마다 queue.put을 호출하는 루프에서 자식 프로세스를 실행하면됩니다. 그런 다음 부모 스레드는 매번 queue.get을 호출하는 다른 루프를 실행할 수 있습니다. – wolfson109