2013-11-03 2 views
0

초기 질문 here.python 다른 자식 프로세스 및 통신

저는 파이썬 프로젝트에 아키텍처가 있습니다. 메인 애플리케이션 프로세스는 많은 하위 프로세스를 생성합니다. 주 프로세스는 네트워크 연결을 수신 한 다음 주 프로세스가 수신 한 데이터를 서로 수신하지 않고 모든 하위 프로세스에 전달합니다. 자식 프로세스는 작업을 수행 할 수도 있고 수신하지 않을 수도있는 데이터를 처리 할 수도 있으며 작업을 수행해야하는 경우 네트워크 연결을 통해 서버로 데이터를 보내도록 기본 프로세스에 메시지를 보내야합니다. 내 아키텍처의 경우 보통 observer pattern from head of four으로 실현되는 콜백 아키텍처를 사용하는 것이 좋습니다.

나는 병렬 작업자가 아닌 프로세스를 가지고있다. 파이프/큐에서받을 수있는 것과 동일한 데이터에서 다른 동작을 할 수있는 다른 자식 프로세스이지만, 코드를 큐에 적용하면 자식 프로세스는 parent_process에서 데이터를 가져 오기 위해 task_queue.get()을 사용하지만, 많은 자식 프로세스 중 하나가 task_queue에서 어떤 작업을 얻는다면 다른 자식 프로세스는 해당 데이터를받지 않고 작업을 수행하지 않습니다. task_queue의 각 작업을 모든 하위 프로세스로 전달하고 응답을 수신해야합니다.

필자는 이미 파이프로 기능을 구현하려고했지만 - 많은 데이터가 필요하고 (적어도 파이프 저장) 많은 프로세스에서 파이프 기능을 구현하는 방법을 모릅니다. 하나의 파이프를 가지고 있고 그것은 while True: inifinite 루프 였기 때문에 - 메인 프로세스는 현재 어떤 자식 프로세스 중 어느 것이 현재 듣고 있는지 알지 못하기 때문에 사용할 수 없다. (사실상 오래된 자식 프로세스 중 하나만 동작을 수행 할 것이다).

또한 대기열로 인식하려고했지만 자식 프로세스 중 하나가 'task_queue.get()'을 호출하면 작업 대기열에서이 항목이 제거되지만이 데이터는 모두 내 자식 프로세스. 또한이 두 방법 모두에서 모든 하위 프로세스를 청취 할 필요가 있지만 하위 작업 중 일부가 작업을 수행하려는 경우 - 주 프로세스로 데이터를 보낸 다음 주 프로세스 호출 콜백에서 해당 하위 프로세스의 관찰자가되고 싶습니다. - 함수 및 ...

저는 파이썬에 대해 알고 있습니다. 제발, 제가 어떻게이 일을 깨달을 수 있는지 가르쳐주세요.

+0

Python'select' 모듈을 사용하면 한 번에 많은 파이프에서 I/O를 기다릴 수 있습니다. – Barmar

답변

0

n 개의 하위 프로세스를 생성하기 전에 부모 프로세스에 n 개의 파이프 또는 큐를 만드는 것이 좋습니다. 그런 다음 각 하위 프로세스에는 통신에 사용되는 단일 파이프 또는 큐가 있습니다.