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 流程控制实例代码
Sep 25 Python
Python 元类使用说明
Dec 18 Python
python创建和删除目录的方法
Apr 29 Python
python删除本地夹里重复文件的方法
Nov 19 Python
python实现电子书翻页小程序
Jul 23 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
Apr 22 Python
浅谈keras 模型用于预测时的注意事项
Jun 27 Python
Python 如何查找特定类型文件
Aug 17 Python
python利用paramiko实现交换机巡检的示例
Sep 22 Python
pycharm 的Structure界面设置操作
Feb 05 Python
python爬虫之爬取笔趣阁小说
Apr 22 Python
写一个Python脚本自动爬取Bilibili小视频
Apr 24 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递归调用删除数组空值元素的方法
2015/04/28 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
脚本吧 - 幻宇工作室用到js,超强推荐share.js
2006/12/23 Javascript
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
基于Jquery实现表格动态分页实现代码
2011/06/21 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
JS实现数组去重方法总结(六种方法)
2017/07/14 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
koa2+vue实现登陆及登录状态判断
2019/08/15 Javascript
详解JavaScript中的数据类型,以及检测数据类型的方法
2020/09/17 Javascript
[03:15]2014DOTA2国际邀请赛 专访国士无双信心满满
2014/07/12 DOTA
python实现查询苹果手机维修进度
2015/03/16 Python
python将ip地址转换成整数的方法
2015/03/17 Python
介绍Python中内置的itertools模块
2015/04/29 Python
python 循环while和for in简单实例
2016/08/16 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
2017/12/18 Python
Pytorch入门之mnist分类实例
2018/04/14 Python
django 自定义过滤器的实现
2019/02/26 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
css sprite简单实例
2016/05/23 HTML / CSS
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
防邪知识进家庭活动方案
2014/08/26 职场文书
普宁寺导游词
2015/02/04 职场文书
汉语拼音教学反思
2016/02/22 职场文书
当你焦虑迷茫时,请读读这6句话
2019/07/24 职场文书
python字典进行运算原理及实例分享
2021/08/02 Python
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android