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 相关文章推荐
如何解决django配置settings时遇到Could not import settings 'conf.local'
Nov 18 Python
python获取远程图片大小和尺寸的方法
Mar 26 Python
python根据给定文件返回文件名和扩展名的方法
Mar 27 Python
python中enumerate函数用法实例分析
May 20 Python
python 字典(dict)按键和值排序
Jun 28 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
Jun 07 Python
Python Tkinter模块实现时钟功能应用示例
Jul 23 Python
Python 数值区间处理_对interval 库的快速入门详解
Nov 16 Python
python list数据等间隔抽取并新建list存储的例子
Nov 27 Python
Python3内置函数chr和ord实现进制转换
Jun 05 Python
Python如何对齐字符串
Jul 30 Python
Python编写memcached启动脚本代码实例
Aug 14 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动态变静态原理
2006/11/25 PHP
PHP 第三节 变量介绍
2012/04/28 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
Javascript实例教程(19) 使用HoTMetal(6)
2006/12/23 Javascript
jquery 批量上传图片实现代码
2010/01/28 Javascript
获取dom元素那些讨厌的位置封装代码
2010/06/23 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
javaScript array(数组)使用字符串作为数组下标的方法
2013/11/19 Javascript
javascript中Object使用详解
2015/01/26 Javascript
谈谈javascript中使用连等赋值操作带来的问题
2015/11/26 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
概述javascript在Google IE中的调试技巧
2016/11/24 Javascript
js中new一个对象的过程
2017/02/20 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
基于ssm框架实现layui分页效果
2019/07/27 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
2020/08/03 Javascript
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
Python实现购物车购物小程序
2018/04/18 Python
PHP统计代码行数的小代码
2019/09/19 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
HTML5中如何显示视频呢 HTML5视频播放demo
2013/06/08 HTML / CSS
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
预备党员党校学习自我评价分享
2013/11/12 职场文书
物业公司采购员岗位职责
2013/12/31 职场文书
小学生获奖感言范文
2014/02/02 职场文书
学校关爱留守儿童活动方案
2014/08/27 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
在职人员跳槽求职信
2015/03/20 职场文书
音乐会主持人开场白
2015/05/28 职场文书