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机制介绍
Sep 07 Python
Python OpenCV实现图片上输出中文
Jan 22 Python
Python 判断文件或目录是否存在的实例代码
Jul 19 Python
python简单区块链模拟详解
Jul 03 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
Jul 30 Python
Django框架模板用法入门教程
Nov 04 Python
PyCharm中配置PySide2的图文教程
Jun 18 Python
Python 在局部变量域中执行代码
Aug 07 Python
python中entry用法讲解
Dec 04 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
Dec 07 Python
python 如何在 Matplotlib 中绘制垂直线
Apr 02 Python
python使用pywinauto驱动微信客户端实现公众号爬虫
May 19 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
Codeigniter实现智能裁剪图片的方法
2014/06/12 PHP
在openSUSE42.1下编译安装PHP7 的方法
2015/12/24 PHP
php集成开发环境详解
2019/09/24 PHP
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
jquery在IE、FF浏览器的差别详细探讨
2013/04/28 Javascript
js关闭浏览器窗口及检查浏览器关闭事件
2013/09/03 Javascript
JS判断字符串字节数并截取长度的方法
2016/03/05 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
2016/04/17 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
bootstrap警告框示例代码分享
2017/05/17 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
2018/01/10 Javascript
动态内存分配导致影响Javascript性能的问题
2018/12/18 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
2019/01/08 Javascript
Node.js之readline模块的使用详解
2019/03/25 Javascript
详解基于mpvue微信小程序下载远程图片到本地解决思路
2019/05/16 Javascript
uni-app实现点赞评论功能
2019/11/25 Javascript
Django 导出 Excel 代码的实例详解
2017/08/11 Python
Window 64位下python3.6.2环境搭建图文教程
2018/09/19 Python
Python 获取 datax 执行结果保存到数据库的方法
2019/07/11 Python
Python如何使用OS模块调用cmd
2020/02/27 Python
python实现感知机模型的示例
2020/09/30 Python
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
美国高档百货Nordstrom的折扣店:Nordstrom Rack
2017/11/13 全球购物
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
企业指导教师评语
2014/04/28 职场文书
投标人廉洁自律承诺书
2014/05/26 职场文书
村班子对照检查材料
2014/08/18 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
2014年劳动部工作总结
2014/12/11 职场文书
高中运动会前导词
2015/07/20 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
详解Django中 render() 函数的使用方法
2021/04/22 Python
【js设计模式】SOLID五大设计原则
2022/03/24 Javascript
python通过新建环境安装tfx的问题
2022/05/20 Python
面试官问我Mysql的存储引擎了解多少
2022/08/05 MySQL