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中的reduce内建函数使用方法指南
Aug 31 Python
用Python计算三角函数之acos()方法的使用
May 15 Python
Python实现模拟登录及表单提交的方法
Jul 25 Python
使用python实现rsa算法代码
Feb 17 Python
python 迭代器和iter()函数详解及实例
Mar 21 Python
python利用smtplib实现QQ邮箱发送邮件
May 20 Python
python计算日期之间的放假日期
Jun 05 Python
python样条插值的实现代码
Dec 17 Python
python开头的coding设置方法
Aug 08 Python
python实现高斯(Gauss)迭代法的例子
Nov 20 Python
Python如何通过Flask-Mail发送电子邮件
Jan 29 Python
带你学习Python如何实现回归树模型
Jul 16 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
Thinkphp中Create方法深入探究
2014/06/16 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
PHP实现登录注册之BootStrap表单功能
2017/09/03 PHP
PHP代码覆盖率统计详解
2020/07/22 PHP
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
ASP 过滤数组重复数据函数(加强版)
2010/05/31 Javascript
jQuery UI AutoComplete 自动完成使用小记
2010/08/21 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
用unescape反编码得出汉字示例
2014/04/24 Javascript
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
javascript去掉代码里面的注释
2015/07/24 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
2015/08/05 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
Vue2实现组件props双向绑定
2016/12/02 Javascript
JavaScript正则表达式简单实用实例
2017/06/23 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
vue vuex vue-rouert后台项目——权限路由(适合初学)
2017/12/29 Javascript
js逆向解密之网络爬虫
2019/05/30 Javascript
vue.js实现三级菜单效果
2019/10/19 Javascript
解决vue 表格table列求和的问题
2019/11/06 Javascript
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
[46:21]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python中atexit模块的基本使用示例
2015/07/08 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
python实现电子书翻页小程序
2019/07/23 Python
python numpy存取文件的方式
2020/04/01 Python
关于Python3 lambda函数的深入浅出
2019/11/27 Python
animation和transition的区别
2020/10/12 HTML / CSS
AmazeUI 等分网格的实现示例
2020/08/25 HTML / CSS
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
荷兰牛仔裤网上商店:Jeans Centre
2018/04/03 全球购物
历史系自荐信范文
2013/12/24 职场文书
生日宴会策划方案
2014/06/03 职场文书
酒店工程部经理岗位职责
2015/04/09 职场文书
2016幼儿园教师节新闻稿
2015/11/25 职场文书