Django+Nginx+uWSGI 定时任务的实现方法


Posted in Python onJanuary 22, 2022

摘要

在Nginx和uWSGI还没配置时,单独在url.py使用apscheduler设置定时任务,使用python manage.py run server,运行正常;但是在配置完成uWSGI后,入口从manage.py变为uwsgi.py,导致需要用户访问后才能加载url.py的apscheduler定时任务,并且随用户访问次数,同一定时任务重复启动。

使用uWSGI的cron

方法一:将url.py的apscheduler定时任务迁移到uwgsi.py

方法二:使用 uWSGI的cron

uWSGI的cron官网 : https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/Cron.html

end=1
while end:
    try:
        import uwsgi
        //建立job_id为0,每天12:12启动fuc的定时器,-1代表*(全部)
        uwsgi.register_signal(0, "", fuc)
        uwsgi.add_cron(0, 12,12,-1,-1,-1)
        end=0
    except:
        pass

方法一或方法二都需要设置uwsgi.ini的worker=1

[uwsgi]
# 进程个数
workers=1

使用socket.bind锁

使用uWSGI的cron只限于单进程情况下使用,如果多进程会导致定时器重复启动问题,可以使用socket.bind锁改造定时任务。

    try:
        import socket
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.bind(("127.0.0.1", 47200))
    except socket.error:
        logger.info('禁止成功')
    else:
        //定时任务方法

存在问题,可能存在同时获取 sock.bind((“127.0.0.1”, 47200)),能够减缓重复问题,不能完全解决。

使用uWSGI的mule

第一步:新建一个Package,编写__init__.py

//如果是Django项目,需要加上才可以使用django的model
//import django
//os.environ.setdefault('DJANGO_SETTINGS_MODULE', '项目名.settings')
//django.setup()

from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
//scheduler.add_job不详说,具体看官网文档
scheduler.add_job(...,timezone='Asia/Shanghai')
scheduler.start()
try:
    import uwsgi
    while True:
        sig = uwsgi.signal_wait()
except Exception as err:
    pass

第二步:设置uwsgi.ini,增加mule = package包名/init.py

[uwsgi]
mule = package包名/__init__.py

到此这篇关于Django+Nginx+uWSGI 定时任务的实现方法的文章就介绍到这了,更多相关Django Nginx uWSGI 定时任务内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python双向链表实现实例代码
Nov 21 Python
Python读写配置文件的方法
Jun 03 Python
Python算法之图的遍历
Nov 16 Python
python机器学习实战之最近邻kNN分类器
Dec 20 Python
基于Python中numpy数组的合并实例讲解
Apr 04 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
Sep 13 Python
浅谈python 中类属性共享的问题
Jul 02 Python
对python while循环和双重循环的实例详解
Aug 23 Python
Python使用shutil模块实现文件拷贝
Jul 31 Python
Python selenium实现断言3种方法解析
Sep 08 Python
python利用xlsxwriter模块 操作 Excel
Oct 14 Python
Python帮你解决手机qq微信内存占用太多问题
Feb 15 Python
梳理总结Python开发中需要摒弃的18个坏习惯
Jan 22 #Python
Pandas搭配lambda组合使用详解
Jan 22 #Python
Python中的tkinter库简单案例详解
Jan 22 #Python
解析python中的jsonpath 提取器
Jan 18 #Python
Python中如何处理常见报错
Jan 18 #Python
Python机器学习应用之工业蒸汽数据分析篇详解
用Python可视化新冠疫情数据
You might like
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
PHP实现的json类实例
2015/07/28 PHP
PHP检测用户是否关闭浏览器的方法
2016/02/14 PHP
php实现的简单数据库操作Model类
2016/11/16 PHP
json实现前后台的相互传值详解
2015/01/05 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
2016/09/05 Javascript
js前端解决跨域问题的8种方案(最新最全)
2016/11/18 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
2017/08/10 jQuery
浅谈Webpack 持久化缓存实践
2018/03/22 Javascript
微信小程序自定义对话框弹出和隐藏动画
2018/07/19 Javascript
2种在vue项目中使用百度地图的简单方法
2018/09/28 Javascript
解决layUI的页面显示不全的问题
2019/09/20 Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
js动态添加带圆圈序号列表的实例代码
2021/02/18 Javascript
python实现探测socket和web服务示例
2014/03/28 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
python用户管理系统
2018/03/13 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
Python3中编码与解码之Unicode与bytes的讲解
2019/02/28 Python
python GUI实现小球满屏乱跑效果
2019/05/09 Python
python爬虫模拟浏览器访问-User-Agent过程解析
2019/12/28 Python
python中wx模块的具体使用方法
2020/05/15 Python
如何实现一个python函数装饰器(Decorator)
2020/10/12 Python
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
质检部职责
2013/12/28 职场文书
讲解员培训方案
2014/05/04 职场文书
前台岗位职责
2015/02/13 职场文书
在校生证明
2015/06/17 职场文书
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android
Mysql开启外网访问
2022/05/15 MySQL