解决django-apscheduler和gunicorn重复运行

栏目: Python · 发布时间: 7年前

内容简介:最近有需求需要用到定时任务,我选择了

最近有需求需要用到定时任务,我选择了 django-apscheduler ,但是在开发环境进行自测时发现 同一时间运行了三次

gunicorn 配置如下图,这里的 cpu1 ,刚好启动的进程数为 3

解决django-apscheduler和gunicorn重复运行

gunicorn 在启动的时候开启了三个进程,但是这里的 apscheduler 也就启动三个,这时会 造成定时任务重复运行

解决问题

网上的解决方法主要有两种:

  • gunicorn 启动的时候加上 --preload 参数,或者 preload_app=True ,默认为 False
  • 第二种是使用 的方式来控制

我这里也是使用锁来实现,具体代码如下:

from django.conf import settings
from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore, register_events, register_job
from django_redis import get_redis_connection

scheduler = BackgroundScheduler()
scheduler.add_jobstore(DjangoJobStore(), "default")
scheduler.remove_all_jobs()

key = "lock"
redis_cli = get_redis_connection(settings.REDIS_CACHE_ALIAS)
data = redis_cli.get(key)
if data is None:
    redis_cli.set(key, "lock", ex=10)
    register_events(scheduler)
    scheduler.start()

启动时设置一个 key ,后面几个进程启动发现 key 已设置就不启动 apscheduler , 设置过期时间为启动后 key 的释放,这里只是一个简单实现思路,可以参考 并发锁 去实现。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

罗辑思维:迷茫时代的明白人

罗辑思维:迷茫时代的明白人

罗振宇 / 北京联合出版公司 / 2015-9 / 42

编辑推荐 1、 罗振宇,自媒体视频脱口秀《罗辑思维》主讲人,互联网知识型社群试水者,资深媒体人和传播专家。曾任CCTV《经济与法》《对话》制片人等。2012年底打造知识型视频脱口秀《罗辑思维》。半年内,由一款互联网自媒体视频产品,逐渐延伸成长为全新的互联网社群品牌。 他对商业和互联网的独到见解,影响了互联网一代的知识结构和对互联网的认识:人类正在从工业化时代进入互联网时代。新的时代将彻......一起来看看 《罗辑思维:迷茫时代的明白人》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具