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引用(import)文件夹下的py文件的方法
Aug 26 Python
简单介绍Python中的round()方法
May 15 Python
python之DataFrame实现excel合并单元格
Feb 22 Python
numpy 进行数组拼接,分别在行和列上合并的实例
May 08 Python
python实现验证码识别功能
Jun 07 Python
Python3利用print输出带颜色的彩色字体示例代码
Apr 08 Python
Python Django给admin添加Action的方法实例详解
Apr 29 Python
vue学习笔记之动态组件和v-once指令简单示例
Feb 29 Python
如何学习Python time模块
Jun 03 Python
Python基础之Socket通信原理
Apr 22 Python
pandas 实现将NaN转换为None
May 14 Python
手把手教你怎么用Python实现zip文件密码的破解
May 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
php 5.3.5安装memcache注意事项小结
2011/04/12 PHP
ThinkPHP实现更新数据实例详解(demo)
2016/06/29 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
PHP实现的AES 128位加密算法示例
2019/09/16 PHP
拖动一个HTML元素
2006/12/22 Javascript
javascript入门·图片对象(无刷新变换图片)\滚动图像
2007/10/01 Javascript
javascript 对象定义方法 简单易学
2009/03/22 Javascript
JavaScript中的16进制字符(改进)
2011/11/21 Javascript
JS 退出系统并跳转到登录界面的实现代码
2013/06/29 Javascript
根据选择不同的下拉值出现相对应的文本输入框
2013/08/01 Javascript
jQuery实现仿Google首页拖动效果的方法
2015/05/04 Javascript
深入剖析JavaScript面向对象编程
2016/07/12 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
BootStrap 可编辑表Table格
2016/11/24 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
bootstrap模态框示例代码分享
2017/05/17 Javascript
详解webpack+vue-cli项目打包技巧
2017/06/17 Javascript
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
使用RN Animated做一个“添加购物车”动画的方法
2018/09/12 Javascript
vue2过滤器模糊查询方法
2018/09/16 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
[04:44]DOTA2英雄梦之声_第12期_矮人直升机
2014/06/21 DOTA
Python中关于使用模块的基础知识
2015/05/24 Python
python从入门到精通 windows安装python图文教程
2019/05/18 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
使用html5 canvas绘制圆环动效
2019/06/03 HTML / CSS
一站式跨境收款解决方案:Payoneer(派安盈)
2018/09/06 全球购物
工程售后服务方案
2014/06/08 职场文书
2015年电教工作总结
2015/05/26 职场文书
妇产科护理心得体会
2016/01/22 职场文书
如何用PHP websocket实现网页实时聊天
2021/05/26 PHP
Golang解析JSON对象
2022/04/30 Golang