2014-10-04 4 views
2

보기를 차단하지 않고 웹 응용 프로그램의 백그라운드에서 일부 작업 (코드 검사 등)을 실행해야합니다.Pyramid 웹 응용 프로그램에서 장기 실행 작업

일반적인 Queue/Celery 시나리오의 비틀기는 최종 결과가 무엇이든 작업이 완료 될 때까지 작업이 완료되고 웹 앱 크래시에서도 살아남거나 작업이 완료 될 때까지 다시 시작해야한다는 것입니다.

multiprocessing.Pool에 대한 매개 변수를 데이터베이스에 기록하고 webapp를 다시 시작할 때 모든 불완전한 작업을 시작하려고 생각했습니다. 그것은 가능하지만 간단하거나 비용 효율적인 방법이 있는지 궁금합니다.

업데이트 : 셀러리가 어째서 좋을까요? 글쎄, 일부 프로젝트에서는 셀러리를 사용했지만 실제로는 훌륭한 솔루션이지만,이 작업은 큰 측면에 있습니다. 필요한 모든 작업은 여러 프로세스/스레드를 생성하는 것 외에는 별도의 서버, 통신 등이 필요합니다. 그들 (git clone ..., svn co ...)에서 작업하고 그들이 성공했는지 실패했는지 확인하십시오. 또 다른 문제는 정교한 기업 가이드 라인, 절차 등을 따르도록해야하므로 솔루션을 가능한 한 작게해야한다는 것입니다. 샐러리를 선상에 올리려면 인간 관리 및 관료적 인 오버 헤드가 필요합니다. 할 수 있으면 피하기를 원합니다.

+0

당신은 셀러리에 대해 언급했습니다 - 당신이 그것을 무시하고 자신의 솔루션을 발명하게 만드는 이유는 무엇입니까? 이 작업은 Celery – Sergey

+0

@ Sergey의 일반적인 사용 사례처럼 보입니다. UPDATE를 참조하십시오. – LetMeSOThat4U

답변

2

셀러리를 사용하는 것이 좋습니다.

셀러리는 자체 서버가 필요하지 않으므로 동일한 컴퓨터에서 실행중인 작업자를 보유 할 수 있습니다. RabbitMQ와 같은 "실제"대기열/메시징 서버 대신 SQL 데이터베이스를 사용하여 "빈곤 한 사람의 대기열"을 가질 수도 있습니다.이 설정은 설명하는 것과 매우 유사하게 보이며, 실행중인 작업.

웹 서버 프로세스에서 장기 실행 작업을 시작할 때의 문제는 프로덕션 환경에서 웹 "근로자"가 웹 서버에 의해 정상적으로 관리된다는 것입니다. 여러 근로자가 언제든지 스폰되거나 죽을 수 있습니다. 접근 방식의 실행 가능성은 사용중인 웹 서버와 그 구성에 따라 크게 달라집니다. 또한 여러 작업자가 각각 작업을 시도 할 때 동시성 문제가 발생할 수 있습니다.

샐러리와 별개로 다른 옵션은 UWSGI's spooler subsystem입니다. 특히 이미 UWSGI를 사용하고있는 경우에 특히 유용합니다.