2013-09-27 71 views
0

我正在使用python构建项目。我必须安排一些工作,所以我使用apscheduler。调度程序在Windows Apache上运行良好。但是当我将项目移到Amazon Ubuntu实例时,我面临着一个问题,即所有作业都在一段时间后运行,而不是一次运行两次。因此,我有两个同时运行的每个作业的实例。一切工作正常在Windows实例...我使用的是wsgi-python。 下面是我的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) 

以下是Python和apcheduler的版本: 的Python 2.7, apscheduler-2.1.1

是否有人可以帮助我在查明问题..感谢你的帮助。在此先感谢..

+0

我在urls.py中添加了调度程序代码,并从wsgi.py中将其删除。现在工作正在运行一次,但是在我提供给他们的时间间隔的一半之后再次运行,即如果我给1个小时,它在半小时后启动同一工作的另一个实例... – planet260

+0

您知道在UNIX上如果使用Apache/mod_wsgi表示您的WSGI应用程序可以同时在多个进程中运行。如果您仅依赖于一个进程(如Windows上的情况),那么您需要适当地配置Apache/mod_wsgi。最有可能使用mod_wsgi守护进程模式。请参阅http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading –

回答

0

有两种不同的方法来解决此问题而不停止多处理。

- 首先是使用锁定机制。你可以创建一个文件作为一个共享资源,并且它首先打开它,它可以用这种方式编写一个锁定字符,只有一个进程会真正运行作业。

- 第二,我们可以将作业与其他所有代码分开。我们可以做的是我们可以通过这种方式创建cron作业,而作业对服务器重新启动没有任何影响。