【发布时间】:2013-04-17 06:48:52
【问题描述】:
我们有一个使用金字塔制作的网络应用程序,并通过 gunicorn+nginx 提供服务。它适用于 8 个工作线程/进程
我们需要工作,我们选择了调度程序。这是我们启动它的方式
from apscheduler.events import EVENT_JOB_EXECUTED, EVENT_JOB_ERROR
from apscheduler.scheduler import Scheduler
rerun_monitor = Scheduler()
rerun_monitor.start()
rerun_monitor.add_interval_job(job_to_be_run,\
seconds=JOB_INTERVAL)
问题是 gunicorn 的所有工作进程都选择了调度程序。我们尝试实现文件锁定,但它似乎不是一个足够好的解决方案。确保在任何给定时间只有一个工作进程选择预定事件并且没有其他线程在下一个JOB_INTERVAL 之前选择它的最佳方法是什么?
即使我们决定稍后切换到 apache2+modwsgi,该解决方案也需要使用 mod_wsgi。它需要与作为服务员的单进程开发服务器一起使用。
来自赏金赞助者的更新
我正面临着 OP 描述的相同问题,只是使用 Django 应用程序。如果原始问题,我很确定添加此细节不会有太大变化。出于这个原因,为了获得更多的知名度,我还用django标记了这个问题。
【问题讨论】:
-
工作从哪里来?网络请求有时会添加新作业吗?
-
没有。它只是一个监视资源并根据资源状态采取行动的作业。资源状态由请求修改。
-
此外,调度程序作业被添加到应用程序的
__init__.py中 -
哇,我在我的应用程序中做了完全相同的事情,只是我没有预见到这个问题,因为我只是和 Waitress 一起开发。密切关注这篇文章!
标签: django pyramid wsgi gunicorn apscheduler