2012-08-07 3 views
2

매우 구체적인 데이터 처리 데몬을 작성해야합니다.다중 처리가 나에게 적합한 도구입니까?

  • # 1 과정 : : 나는 다중 작업을 수 있다고 생각 방법은 다음과

    은 하나 개의 프로세스는 몇 가지 중요한 메타 데이터를 가져 오기 위해, 그들은이 매 초마다 인출 할 수 있지만, 그 데이터는 과정에서 사용할 수 있어야합니다 # 2. 프로세스 # 1이 데이터를 쓰고 프로세스 # 2가 데이터를 읽습니다.

  • 프로세스 # 2 : 프로세스 # 1에서 수신 된 내용을 기반으로 실제 데이터를 가져 오는 두 프로세스. 가져온 데이터는 (나중에) 처리 될 (큰) 대기열에 저장됩니다.

  • 프로세스 # 3 : 프로세스 # 2에서 생성 된 대기열을 폴링하고 해당 데이터를 처리하는 두 개 이상의 프로세스. 완료되면 새로운 대기열이 채워져 프로세스 # 4에서 사용됩니다.

  • 프로세스 # 4 : 프로세스 # 3에서 채워진 대기열을 읽고 HTTP를 통해 결과를 다시 보내는 두 프로세스.

이러한 다양한 프로세스의이면에있는 아이디어는 가능한 한 많이 특수화하고 가능한 한 독립적으로 만드는 것입니다.

모든 양태에서는 프로세스

여기에 구현되는 주요 데몬에 랩됩니다

내가 무엇을 상상하는 것은/관련 바보/과잉 인 경우 나는 등/궁금 특히 daemonized 될 주 상위 프로세스 내에 데몬 multiprocessing.Process (es)을 실행하는 경우. 또한 잠재적 인 잠금 문제에 대해 조금 걱정이됩니다. 이론적으로 데이터를 읽고 쓰는 프로세스는 여러 가지 변수/구조를 사용하므로 몇 가지 문제를 피해야하지만 여전히 우려됩니다.

아마도 내 컨텍스트에 멀티 프로세싱을 사용하는 것이 옳지 않습니다. 이에 대한 귀하의 의견을 듣고 싶습니다.

참고 :

  • 나는 IPC에 대한 ZeroMQ를 사용하는 방법에 대한 생각 데이터 구조 서버
  • 로 레디 스를 사용할 수 있지만 멀티뿐만 아니라 일을 할 수 있다면 다른 별도의 라이브러리를 사용하지 않는 것입니다.

미리 의견을 보내 주셔서 감사합니다.

답변

0

일반적으로 의사 소통을위한 계획은 물론 다른 업무를 수행하는 다른 근로자의 부서는 이미 좋아 보인다. 그러나 처리 단계가 I/O 또는 CPU 바운드 인 경우 항상주의해야합니다. I/O 바인딩을 사용하는 경우에는 공유 메모리가 허용되므로 응용 프로그램의 메모리 공간이 작아지고 스레드 간의 통신이보다 효율적으로 수행 될 수있을 때마다 스레딩 모듈을 사용할 수 있습니다. 추가 CPU 성능이 필요한 경우에만 멀티 프로세싱을 수행하십시오. 시스템에서는 두 가지를 모두 사용할 수 있습니다 (프로세스 3 (또는 그 이상)은 무거운 컴퓨팅을 수행하는 반면 다른 작업자는 주로 I/O 바인딩 임).

관련 문제