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在命令行下使用google翻译(带语音)
Jan 16 Python
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
Jan 22 Python
Windows系统配置python脚本开机启动的3种方法分享
Mar 10 Python
Python在Windows和在Linux下调用动态链接库的教程
Aug 18 Python
python中map()与zip()操作方法
Feb 27 Python
Python selenium抓取微博内容的示例代码
May 17 Python
python 字典操作提取key,value的方法
Jun 26 Python
Python基于pyecharts实现关联图绘制
Mar 27 Python
Python实现AI换脸功能
Apr 10 Python
Python使用jupyter notebook查看ipynb文件过程解析
Jun 02 Python
Python自动创建Excel并获取内容
Sep 16 Python
Python测试框架pytest高阶用法全面详解
Jun 01 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
星际争霸秘籍
2020/03/04 星际争霸
将PHP作为Shell脚本语言使用
2006/10/09 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
2011/06/06 PHP
Yii2框架类自动加载机制实例分析
2018/05/02 PHP
javascript 页面划词搜索JS
2009/09/28 Javascript
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
jqeury-easyui-layout问题解决方法
2014/03/24 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
浅谈window.onbeforeunload() 事件调用ajax
2016/06/29 Javascript
vue.js父组件使用外部对象的方法示例
2017/04/25 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
2017/07/14 Javascript
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
Vue 自定义动态组件实例详解
2018/03/28 Javascript
使用Layer组件弹出多个对话框(非嵌套)与关闭及刷新的例子
2019/09/25 Javascript
vue-router 中 meta的用法详解
2019/11/01 Javascript
[46:59]完美世界DOTA2联赛PWL S2 GXR vs Ink 第二场 11.19
2020/11/20 DOTA
python检查序列seq是否含有aset中项的方法
2015/06/30 Python
Python实现的绘制三维双螺旋线图形功能示例
2018/06/23 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
对python添加模块路径的三种方法总结
2018/10/16 Python
python pandas实现excel转为html格式的方法
2018/10/23 Python
Python跳出多重循环的方法示例
2019/07/03 Python
python实现爬取百度图片的方法示例
2019/07/06 Python
Python3实现汉语转换为汉语拼音
2019/07/08 Python
python SOCKET编程基础入门
2021/02/27 Python
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
服务行业个人求职的自我评价
2013/12/12 职场文书
网络事业创业计划书范文
2014/01/09 职场文书
酒店管理求职信范文
2014/04/06 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
2014年信息中心工作总结
2014/12/17 职场文书
2015年项目工作总结
2015/04/29 职场文书
立项申请报告范本
2015/05/15 职场文书
旗帜观后感
2015/06/08 职场文书