2

我正在使用 python 构建一个项目。我必须安排一些工作,所以我正在使用 apscheduler。调度程序在 Windows Apache 上运行良好。但是,当我将项目移动到 Amazon Ubuntu 实例时,我遇到了一个问题,即所有作业都在一定的时间间隔后运行,而不是一次运行两次。所以我有每个作业的两个实例同时运行。在 Windows 实例上一切正常……我正在使用 wsgi-python。下面是我的wsgi文件..

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

有人可以帮我找出问题。感谢您的帮助。提前致谢..

4

1 回答 1

1

有两种不同的方法可以在不停止多处理的情况下解决这个问题。

--第一个是使用锁定机制。您可以创建一个文件,该文件将充当共享资源,并且哪个进程首先打开它,它可以在其中写入一个锁定字符,这样只有一个进程将实际运行作业。

--其次,我们可以将作业与所有其他代码分开。我们可以做的是我们可以创建 cron 作业,这样作业不会影响服务器重启。

于 2013-11-07T11:15:10.100 回答