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制作CSDN免积分下载器
Mar 10 Python
Python更新数据库脚本两种方法及对比介绍
Jul 27 Python
Python创建普通菜单示例【基于win32ui模块】
May 09 Python
python 把列表转化为字符串的方法
Oct 23 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
Nov 06 Python
利用python实现在微信群刷屏的方法
Feb 21 Python
Python3.5面向对象编程图文与实例详解
Apr 24 Python
利用python3 的pygame模块实现塔防游戏
Dec 30 Python
tensorflow 实现自定义梯度反向传播代码
Feb 10 Python
python分别打包出32位和64位应用程序
Feb 18 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
Mar 10 Python
python设置中文界面实例方法
Oct 27 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
ZF框架实现发送邮件的方法
2015/12/03 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
2018/04/04 PHP
jQuery Ajax 全解析
2009/02/08 Javascript
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
setTimeout和setInterval的区别你真的了解吗?
2011/03/31 Javascript
js实现拉伸拖动iframe的具体代码
2013/08/03 Javascript
PHP开发者必须掌握的6个关键字
2014/04/14 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
2015/10/01 Javascript
深入理解MVC中的时间js格式化
2016/05/19 Javascript
Bootstarp基本模版学习教程
2017/02/01 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
js实现星星海特效的示例
2020/09/28 Javascript
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
python实现保存网页到本地示例
2014/03/16 Python
Python def函数的定义、使用及参数传递实现代码
2014/08/10 Python
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
使用Python写一个贪吃蛇游戏实例代码
2017/08/21 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
PyQT5 emit 和 connect的用法详解
2019/12/13 Python
python数据预处理方式 :数据降维
2020/02/24 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
2021/02/01 Python
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
2014/07/21 HTML / CSS
Ejb技术面试题
2015/04/29 面试题
精彩的英文自荐信
2014/01/30 职场文书
高中军训感言800字
2014/03/05 职场文书
2014年精神文明工作总结
2014/12/23 职场文书
先进典型发言材料
2014/12/30 职场文书
保护动物的宣传语
2015/07/13 职场文书
暑期家教宣传单
2015/07/14 职场文书
趣味运动会广播稿
2015/08/19 职场文书
MySQL8.0升级的踩坑历险记
2021/11/01 MySQL
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle