【问题标题】:Python, Apscheduler issue -- Job running twice instead of oncePython,Apscheduler 问题——作业运行两次而不是一次
【发布时间】:2013-10-03 17:00:17
【问题描述】:

我正在使用 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的版本: 蟒蛇2.7, apscheduler-2.1.1

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

【问题讨论】:

  • 我在 urls.py 中添加了调度程序代码,并从 wsgi.py 中删除了它。现在作业正在运行一次,但在我提供它们的一半间隔后再次运行,即如果我给 1 小时,它会在半小时后启动同一作业的另一个实例......
  • 您确实意识到,在 UNIX 上,如果使用 Apache/mod_wsgi,您的 WSGI 应用程序可以同时在多个进程中运行。如果您只依赖一个进程,就像在 Windows 上一样,那么您需要适当地配置 Apache/mod_wsgi。最有可能使用 mod_wsgi 守护进程模式。见code.google.com/p/modwsgi/wiki/ProcessesAndThreading

标签: django apache ubuntu python-2.7 apscheduler


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 2016-07-13
    • 2019-03-07
    • 2019-02-16
    • 1970-01-01
    • 2018-09-26
    相关资源
    最近更新 更多