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中的二进制位运算符
May 13 Python
一步步解析Python斗牛游戏的概率
Feb 12 Python
Python实现压缩与解压gzip大文件的方法
Sep 18 Python
Python 实现一个颜色色值转换的小工具
Dec 06 Python
python常见排序算法基础教程
Apr 13 Python
python字符串常用方法
Jun 14 Python
python实现点对点聊天程序
Jul 28 Python
在Python中构建增广矩阵的实现方法
Jul 01 Python
python pandas时序处理相关功能详解
Jul 03 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
Nov 28 Python
python 已知三条边求三角形的角度案例
Apr 12 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 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
phpmyadmin的#1251问题
2006/11/25 PHP
PHP处理大量表单字段的便捷方法
2015/02/07 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
$.format,jquery.format 使用说明
2011/07/13 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
window.returnValue使用方法示例介绍
2014/07/03 Javascript
js继承call()和apply()方法总结
2014/12/08 Javascript
jQuery中children()方法用法实例
2015/01/07 Javascript
js对象继承之原型链继承实例
2015/01/10 Javascript
易操作的jQuery表单提示插件
2015/12/01 Javascript
AngularJS bootstrap启动详解及实例代码
2016/09/14 Javascript
js滚轮事件兼容性问题需要注意哪些
2016/11/15 Javascript
bootstrap警告框示例代码分享
2017/05/17 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
详解vuex结合localstorage动态监听storage的变化
2018/05/03 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
微信小程序中的上拉、下拉菜单功能
2020/03/13 Javascript
vue实现点击按钮切换背景颜色的示例代码
2020/06/23 Javascript
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
python类继承用法实例分析
2014/10/10 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
档案管理员岗位职责
2013/12/01 职场文书
军训的自我鉴定
2013/12/10 职场文书
校园报刊亭的创业计划书
2014/01/02 职场文书
个人求职信范文分享
2014/01/06 职场文书
《哪吒闹海》教学反思
2014/02/28 职场文书
理发店策划方案
2014/06/05 职场文书
投诉书格式范本
2015/07/02 职场文书
小学数学教学随笔
2015/08/14 职场文书
2019入党申请书格式和范文
2019/06/25 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
node.js使用express-fileupload中间件实现文件上传
2021/07/16 Javascript
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript