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回溯法实现数组全排列输出实例分析
Mar 17 Python
详解Python程序与服务器连接的WSGI接口
Apr 29 Python
python通过post提交数据的方法
May 06 Python
Python中http请求方法库汇总
Jan 06 Python
Python实现在线音乐播放器
Mar 03 Python
Android分包MultiDex策略详解
Oct 30 Python
python实现学生信息管理系统
Apr 05 Python
python如何让类支持比较运算
Mar 20 Python
pytorch实现建立自己的数据集(以mnist为例)
Jan 18 Python
django orm模块中的 is_delete用法
May 20 Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
Jan 12 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
PHP防止post重复提交数据的简单例子
2014/06/07 PHP
CI框架给视图添加动态数据
2014/12/01 PHP
php表单敏感字符过滤类
2014/12/08 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
Javascript 继承实现例子
2009/08/12 Javascript
基于jquery的合并table相同单元格的插件(精简版)
2011/04/05 Javascript
关于JS管理作用域的问题
2013/04/10 Javascript
a标签的href和onclick 的事件的区别介绍
2013/07/26 Javascript
一个简单的jquery进度条示例
2014/04/28 Javascript
JavaScript中的函数模式详解
2015/02/11 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
2015/12/10 Javascript
微信小程序-拍照或选择图片并上传文件
2017/01/06 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
详解wow.js中各种特效对应的类名
2017/09/13 Javascript
js实现会跳动的日历效果(完整实例)
2017/10/18 Javascript
js中bool值的转换及“&&”、“||”、 “!!”详解
2017/12/21 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
jdk1.8+vue elementui实现多级菜单功能
2020/09/24 Javascript
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
python实现斐波那契数列的方法示例
2017/01/12 Python
Python简单实现查找一个字符串中最长不重复子串的方法
2018/03/26 Python
pytorch中使用cuda扩展的实现示例
2020/02/12 Python
python实现简单的购物程序代码实例
2020/03/03 Python
python如何调用php文件中的函数详解
2020/12/29 Python
Dyson加拿大官方网站:购买戴森吸尘器,风扇,冷热器及配件
2016/10/26 全球购物
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
Pretty You London官网:英国拖鞋和睡衣品牌
2019/05/08 全球购物
AssertionError 跟一下那个类是 “is – a”的关系
2012/02/21 面试题
大学毕业感言
2014/01/10 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
麦田里的守望者读书笔记
2015/06/30 职场文书
中秋联欢会主持词
2015/07/04 职场文书
Java实现聊天机器人完善版
2021/07/04 Java/Android