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中的map()函数和reduce()函数的用法
Apr 27 Python
Python遍历目录并批量更换文件名和目录名的方法
Sep 19 Python
Python基于dom操作xml数据的方法示例
May 12 Python
python计算日期之间的放假日期
Jun 05 Python
关于python列表增加元素的三种操作方法
Aug 22 Python
Django REST framework视图的用法
Jan 16 Python
详解Python中的各种转义符\n\r\t
Jul 10 Python
pygame实现俄罗斯方块游戏(基础篇2)
Oct 29 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
Apr 27 Python
python实现canny边缘检测
Sep 14 Python
python中HTMLParser模块知识点总结
Jan 25 Python
用Python实现一个打字速度测试工具来测试你的手速
May 28 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/10/09 PHP
PHP个人网站架设连环讲(四)
2006/10/09 PHP
PHP读取目录下所有文件的代码
2008/01/07 PHP
WordPress中对访客评论功能的一些优化方法
2015/11/24 PHP
List Installed Software Features
2007/06/11 Javascript
FireFox JavaScript全局Event对象
2009/06/14 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
2016/07/08 Javascript
jQuery在ie6下无法设置select选中的解决方法详解
2016/09/20 Javascript
JavaScript中splice与slice的区别
2017/05/09 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
利用JS判断客户端类型你应该知道的四种方法
2017/12/22 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
webpack优化之代码分割与公共代码提取详解
2019/11/22 Javascript
Vue中this.$nextTick的作用及用法
2020/02/04 Javascript
JavaScript WeakMap使用详解
2021/02/05 Javascript
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
python距离测量的方法
2018/03/06 Python
python3写的简单本地文件上传服务器实例
2018/06/04 Python
使用Template格式化Python字符串的方法
2019/01/22 Python
Python3.5 Pandas模块缺失值处理和层次索引实例详解
2019/04/23 Python
用python建立两个Y轴的XY曲线图方法
2019/07/08 Python
Python3中urlencode和urldecode的用法详解
2019/07/23 Python
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
python openssl模块安装及用法
2020/12/06 Python
中国最大的名表商城:万表网
2016/08/29 全球购物
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
市场营销管理毕业生自荐信
2014/03/03 职场文书
毕业晚会主持词
2014/03/24 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
学习保证书100字
2015/02/26 职场文书
公司辞职信模板
2015/05/13 职场文书
欠款证明
2015/06/24 职场文书
简历自我评价:教师师德表现自我评价
2019/04/24 职场文书