2011-12-21 7 views
1

이것은 간단한 질문처럼 보입니다. 그러나 대답을 찾는 데 어려움이 있습니다.웹 응용 프로그램에 대한 반복 작업 실행

저는 지속적으로 작업을 실행해야하는 웹 앱을 만들고 있습니다.

Pingdom 또는 Twitterfeed 같은 사이트를 비유로 사용하겠습니다. 아시는 바와 같이 Pingdom은 가동 시간을 확인하므로 끊임없이 웹 사이트를 확인하여 Twitter 피드가 RSS 피드를 확인한 후 변경되었는지 확인한 후 트윗합니다. 나는 또한 간단한 스크립트를 실행하여 데이터베이스의 URL을 순회하고 그에 대한 조치를 수행해야한다.

내 질문은 : 어떻게 구현해야합니까? 현재 cron에 익숙하며 현재 서버 백업을 수행하는 데 사용하고 있습니다. 이것이 갈 길입니까?

필자는 끝날 때 데이터베이스의 다음 URL로 처음부터 다시 시작하여 Python 스크립트를 무기한으로 만드는 법을 알고 있습니다. 방금 서버에서 실행해야합니까? 나는 그것이 항상 달려 있고 충돌하지 않는다는 것을 어떻게 알 수 있습니까?

나는이 질문이 의미가 있기를 바랍니다. 나는 다른 누군가를 반복하지 않기를 바랍니다.

, 감사합니다

편집 : 명확하게하기 위해, 내가 지속적으로 실행하는 작업이 필요합니다. 에서와 같이 데이터베이스에서 URL 1을 확인하고 데이터베이스에서 URl 2를 확인하고 URL 3을 확인한 다음 마지막 URL에 도달하면 오른쪽으로 다시 이동하십시오. 감사!

답변

1

명령 줄에서 실행할 수있는 작업을 반복해서 실행해야하는 경우 - cron이 이상적입니다. 이 접근법의 단점은 없습니다.

업데이트 : 좋아요, 문제는 다소 다릅니다. 이제 몇 가지 해결책을 볼 수 있습니다 :

  • 설정된 간격으로 cron 작업을 실행하고 다음 번에 다른 실행에서 데이터를 처리 할 때마다 데이터를 한 번 처리합니다. 병렬 처리를 피하기 위해 PID/데이터베이스/세마포어 사용;
  • 데이터베이스에 데이터를 삽입/업데이트하는 프로세스를 업데이트합니다. 정보가 삽입/업데이트 될 때 처리되도록하십시오; c)
  • 악마 프로세스를 작성하여 메모리에 저장하고 실시간으로 데이터를 확인하십시오.
+0

하지만 작업을 계속 실행하려면 어떻게해야합니까? cron은 정해진 간격으로 작업을 실행하지 않습니까? 또는 매시간 작업에 별표를 표시하고 한 시간 동안 실행 한 후 스스로를 죽이려는 것입니까? 감사. – samiles

+0

내 의견이 너무 커서 초기 답변을 업데이트했습니다. 그것을보십시오. – Minras

1

cron이 작업은 물론 다른 작업 스케줄러와 함께 할 수도 있습니다.

주요 포인트는 질문에 제목에서 발견된다 :

는 백그라운드 작업 및 웹 응용 프로그램을 별도의 보관해야 웹 응용 프로그램

에 대한 반복 작업을 실행합니다. 그들은 코드를 공유 할 수 있고 데이터베이스에 대한 액세스를 공유 할 수 있지만 별도의 개별 응용 프로그램 컨텍스트 여야합니다. (동일한 백엔드 로직에 액세스하는 별도의 UI로 간주하십시오.)

웹 응용 프로그램과 백그라운드 프로세스가 구조적으로 매우 다르며 혼합되지 않기 때문에이 주된 이유가 있습니다. 웹 서버 (Apache, IIS 등) 내에서 유지되는 웹 응용 프로그램의 구조를 생각해보십시오. 응용 프로그램은 언제 실행됩니까? 그것이 "켜져"있을 때? 그것은 실제로 실행중인 작업이 아닙니다. 이것은 출력 (응답)을 처리하고 생성 한 다음 대기 상태로 돌아 가기위한 입력 (요청)을 기다리는 서비스입니다.

웹 응용 프로그램은 요청에 응답하기위한 것입니다. 예약 된 작업 또는 데몬 작업은 백그라운드에서 반복되는 프로세스를 실행하기위한 것입니다. 두 가지를 분리하여 유지하면 두 가지를 훨씬 쉽게 관리 할 수 ​​있습니다.

+0

감사합니다. 내 제목에서 나는 실제로 사용자가 보는 웹 앱이 백그라운드 작업에 의해 생성 된 데이터에 의존한다는 것을 의미했다. 아마도 나는 그것을 나쁘게 말했습니다 :) – samiles

+0

@samiles : 아니,이 게시물은 언젠가 Google 검색에서 질문을 우연히 만나는 사람을 도울 것입니다. Minras의 답변에 대한 귀하의 의견에 따라이 스레드가 도움이 될 수 있습니다 : http://stackoverflow.com/questions/473620/how-do-you-create-a-daemon-in-python – David

관련 문제