2013-09-27 1 views
0

나는 파이썬을 사용하여 프로젝트를 구축 중이다. 내가 apscheduler를 사용하고 있으므로 일부 작업을 예약해야합니다. 스케줄러는 Windows Apache에서 잘 작동합니다. 하지만 아마존 우분투 인스턴스로 프로젝트를 옮겼을 때 모든 작업이 일정한 시간 간격 후에 실행되지만 한번 대신 두 번 실행되는 문제에 직면하고 있습니다. 그래서 모든 작업이 동시에 두 번 실행됩니다. 모든 것이 Windows 인스턴스에서 잘 작동합니다 ... wsgi-python을 사용하고 있습니다. 다음은 아래 파이썬, Apscheduler 문제 - 한번 대신 두 번 실행되는 작업

import os 
import sys 

sys.path.append('C:/Django/sweetspot/src/sweetspot') 
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings_server' 

from jobs.FeedAndNews import FeedParse, NewsParse 
from apscheduler.scheduler import Scheduler 

import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 

today = datetime.datetime.today() 
nex = datetime.timedelta(hours=1) 
startsat = today + nex 
timestr = startsat.strftime("%Y-%m-%d %H:%M:%S") 

scheduler = Scheduler() 
scheduler.start() 

scheduler.add_interval_job(FeedParse, hours=1, start_date=timestr) 
scheduler.add_interval_job(NewsParse, hours=1, start_date=timestr) 

파이썬과 apcheduler의 버전입니다 .. 내 WSGI 파일입니다 파이썬 2.7, apscheduler-2.1.1

누군가가 문제를 식별 좀 도와 주실 래요 .. 당신의 도움을 주셔서 감사합니다. 미리 감사드립니다.

+0

urls.py에 스케줄러 코드를 추가하고 wsgi.py에서 삭제했습니다. 이제는 작업이 한 번 실행되지만 반 시간이 지나면 다시 실행됩니다. 예를 들어 1 시간을 주면 30 분 후에 같은 작업의 다른 인스턴스가 시작됩니다 ... – planet260

+0

Apache에서 Apache를 사용하는 경우/mod_wsgi를 사용하여 WSGI 응용 프로그램을 여러 프로세스에서 동시에 실행할 수 있습니다. Windows 에서처럼 하나의 프로세스 만 사용하는 경우에는 Apache/mod_wsgi를 적절히 구성해야합니다. 대부분 mod_wsgi 데몬 모드를 사용합니다. http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading을 참조하십시오. –

답변

0

다중 처리를 중단하지 않고이 문제를 해결할 수있는 두 가지 방법이 있습니다.

- 먼저 잠금 장치를 사용하십시오. 공유 리소스 역할을하는 파일을 생성 할 수 있으며, 먼저 프로세스를 열면 프로세스 중 하나만 실제로 작업을 실행하는 방식으로 잠금 문자를 작성할 수 있습니다.

- 두 번째로 다른 모든 코드와 작업을 구분할 수 있습니다. 우리가 할 수있는 일은 작업을 서버 재시작에 아무런 영향을 미치지 않으면 서 cron 작업을 생성 할 수 있다는 것입니다.

관련 문제