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 09 Python
Python使用dis模块把Python反编译为字节码的用法详解
Jun 14 Python
Python 爬虫图片简单实现
Jun 01 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
Feb 21 Python
python实现事件驱动
Nov 21 Python
python实现贪吃蛇游戏
Mar 21 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
Jun 25 Python
Python pandas用法最全整理
Aug 04 Python
Python如何调用JS文件中的函数
Aug 16 Python
Matplotlib.pyplot 三维绘图的实现示例
Jul 28 Python
Python使用pickle进行序列化和反序列化的示例代码
Sep 22 Python
Python排序函数的使用方法详解
Dec 11 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
Could not load type System.ServiceModel.Activation.HttpModule解决办法
2012/12/29 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
2016/01/09 PHP
详解PHP数据压缩、加解密(pack, unpack)
2016/12/17 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
js字符编码函数区别分析
2011/12/28 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
2015/10/23 Javascript
[原创]jQuery常用的4种加载方式分析
2016/07/25 Javascript
jQuery Chosen通用初始化
2017/03/07 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
微信小程序实现自动定位功能
2018/10/31 Javascript
nodejs基础之buffer缓冲区用法分析
2018/12/26 NodeJs
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
2019/07/18 Javascript
[01:29]2014DOTA2展望TI 剑指西雅图DK战队专访
2014/06/30 DOTA
使用wxpython实现的一个简单图片浏览器实例
2014/07/10 Python
python实现udp数据报传输的方法
2014/09/26 Python
使用Python的判断语句模拟三目运算
2015/04/24 Python
Python发送form-data请求及拼接form-data内容的方法
2016/03/05 Python
Python中的列表生成式与生成器学习教程
2016/03/13 Python
利用Python批量生成任意尺寸的图片
2016/08/29 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
django启动uwsgi报错的解决方法
2018/04/08 Python
pygame实现简易飞机大战
2018/09/11 Python
使用Python画股票的K线图的方法步骤
2019/06/28 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
Python中的延迟绑定原理详解
2019/10/11 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
python 画图 图例自由定义方式
2020/04/17 Python
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
重点工程汇报材料
2014/08/27 职场文书
MySQL 数据丢失排查案例
2021/05/08 MySQL