2013-05-29 3 views
0

영구 객체 MyService를 사용하는 웹 응용 프로그램에서 작업하고 있습니다. 웹 인터페이스를 사용하여 동적으로 상태를 업데이트하고 동작을 모니터링합니다. 이제 주기적으로 그 메소드 중 하나를 호출하려고합니다. 나는 셀리 PeriodicTask를 사용하려고 생각했지만 몇 가지 문제를 다루고있다.django 서버 공유 범위 셀러리 작업자

문제는 내가 그이면 MyService를 확인하는 경우에도 것이 안전 하나 개 이상의 스레드에서 사용할 수있는 싱글이 있다는 것이다
python manage.py runserver 
python manage.py celery worker 
python manage.py celerybeat 

이, 셀러리는 물체 자체의 신선한 복사본을 생성합니다 : 내가 세 가지 프로세스를 실행해야 할 것 같습니다 . 내가 장고 서버와 샐러리의 주요 프로세스 사이에이 개체를 공유 할 수있는 방법이 있나요? 난 장고 스크립트 내에서 셀러리를 시작하는 방법을 찾으려고했지만 지금까지 성공하지 못했습니다. 어떤 도움을 주시면 감사하겠습니다.

답변

1

여러 프로세스 또는 어쩌면 여러 대의 컴퓨터간에 무언가를 공유해야하는 경우 (예 : 작업자가 별도의 컴퓨터에서 실행될 수 있음) 정보를 공유하는 가장 좋은 (그리고 아마도 가장 쉬운) 방법은 외부 서비스를 사용하는 것입니다.

가장 간단한 경우에는 장고의 DB를 사용할 수 있지만, 쓰기 부하가 심한 경우와 같이 사용자에게 적합하지 않은 경우 Redis 또는 Memcache와 같은 것을 사용할 수 있습니다 (대화 할 수 있음). Django의 캐싱 API를 통해). 이것들을 사용하면 큰 쓰기로드를 처리 할 수 ​​있고 예 외에도 사용할 수 있습니다. 셀레 리에 대한 대기열로도 Redis.

+0

예, 이것이 간단한 정적 데이터를 전달하는 방법이라고 생각합니다. 불행히도 MyService는 단순한 데이터 저장 이상의 것입니다. 콜백 함수를 사용하여 새로운 스레드를 생성해야합니다. 나는 새로운 서비스로 그것을 실행하고 장고가 직접 소켓을 사용하여 통신하게 할 것이라고 생각한다. – pegazik

+0

정확히 무엇을 해야하는지 모르겠지만 안전한 방법으로 뭔가를 의사 소통을 할 수도 있습니다. redis pubsub 나 0mq와 같은 메시지 대기열을 볼 수도 있습니다. –

관련 문제