2013-04-23 1 views
0

다음은 내가하려는 일입니다. PHP를 사용하여 메시지를 대기열에 넣습니다 (Beanstalkd, IronMQ, Amazon SQS).PHP가 메시지 대기열에 푸시; 다중 스레드 파이썬 클라이언트 프로세스?

그런 다음 파이썬 스크립트가 즉시 메시지를 가져 오길 원합니다. 나는 단지 while(true) 루프를 실행하는 1 개의 파이썬 스크립트를 가지고 메시지 서버를 폴링 할 것인가?

그런 다음 각 작업에 대해 새 스레드를 사용하여 처리하십시오. 대기열에 10 개의 메시지가 있으면 파이썬이 10 개의 스레드 (각 작업마다 1 개씩)를 실행하게합니다.

내 질문은 :

  1. 이이 일을 단단한 방법, 아니면이를 설정하는 더 나은 방법이?
  2. 파이썬 스크립트가 작동하고 폴링을 영원히 유지하도록하려면 어떻게해야합니까?

답변

1

이것은 일을 수행하는 확실한 방법입니까, 아니면 이것을 설정하는 더 좋은 방법입니까? 당신이 동시 작업의 큰 숫자를 기대하는 경우, 당신은 thread pool를 사용하여 스레드의 총 수를 제한 할 수 있지만

는 나에게 합리적인 소리.

CPU 집약적 인 스레드의 경우 총 스레드 수가 CPU 코어의 총 개수를 초과 할 경우 훨씬 더 많은 CPU 성능을 얻을 수 없으며 상당한 디스크 I/O가 필요한 스레드의 경우 디스크를 쓰러 뜨리는 일이 없도록 제한하십시오.

어떻게 파이썬 스크립트가 작동하고 폴링을 영원히 유지할 수 있습니까?

데몬 프로세스가 모니터하는 또 다른 프로세스가있는 것이 일반적이며 충돌하거나 응답이 없어지면 다시 시작합니다. 간단한 cronjob이 목적을 위해 충분할 수 있습니다.

+0

[supervisord] (http://supervisord.org/) 내 파이썬 스크립트를 관리하고 싶습니다. –

+0

@StephenSarcsamKamenar cronjob 이외의 다른 것을 사용한 적이 없기 때문에 어떤 구체적인 해결책을 추천 할 수 없습니다. 실제 데몬 프로세스는 일반적으로 자식 프로세스를 fork()하고 자식 프로세스를 모니터하지만, 이것은 더 복잡 할 수 있습니다. 하루가 끝나면 데몬이 잘 테스트되는 한, 모니터 할 필요가 전혀 없을 수도 있습니다. – Aya

+0

데몬 충돌 문제에 대한 해결책이 있습니다 - [supervisord] (http://supervisord.org). 이 사람은 다음을 수행 할 것입니다. 1. 프로세스를 모니터하십시오. 2. init.d 스크립트없이 데몬을 시작하십시오. 3. 죽은 경우 프로세스를 다시 시작하십시오. –

관련 문제