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中使用matplotlib模块绘制数据图的示例
May 04 Python
python实现给微信公众号发送消息的方法
Jun 30 Python
Python中pandas模块DataFrame创建方法示例
Jun 20 Python
django rest framework 数据的查找、过滤、排序的示例
Jun 25 Python
python生成九宫格图片
Nov 19 Python
python 一个figure上显示多个图像的实例
Jul 08 Python
python移位运算的实现
Jul 15 Python
Python matplotlib生成图片背景透明的示例代码
Aug 30 Python
使用已经得到的keras模型识别自己手写的数字方式
Jun 29 Python
解决导入django_filters不成功问题No module named 'django_filter'
Jul 15 Python
Python中return函数返回值实例用法
Nov 19 Python
Python+Selenium实现读取网易邮箱验证码
Mar 13 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中判断数组是一维,二维,还是多维的解决方法
2013/05/04 PHP
修改php.ini以达到屏蔽错误信息并记录日志
2013/06/16 PHP
destoon安装出现Internal Server Error的解决方法
2014/06/21 PHP
简单谈谈 php 文件锁
2017/02/19 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
javascript创建动态表单的方法
2015/07/25 Javascript
js实现选中复选框文字变色的方法
2015/08/14 Javascript
node.js+express制作网页计算器
2016/01/17 Javascript
jQuery基于扩展实现的倒计时效果
2016/05/14 Javascript
AngularJs Dependency Injection(DI,依赖注入)
2016/09/02 Javascript
Bootstrap基本样式学习笔记之表单(3)
2016/12/07 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
JS实现最简单的冒泡排序算法
2017/02/15 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
2017/08/31 Javascript
微信小程序媒体组件详解(视频,音乐,图片)
2017/09/19 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
Python机器学习之决策树算法实例详解
2017/12/06 Python
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
python 字典操作提取key,value的方法
2019/06/26 Python
Python队列、进程间通信、线程案例
2019/10/25 Python
python 操作hive pyhs2方式
2019/12/21 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
2020/03/23 Python
韩语专业本科生求职信
2013/10/01 职场文书
本科生学习总结的自我评价
2013/10/02 职场文书
电力公司个人求职信范文
2014/02/04 职场文书
产品设计开发计划书
2014/05/07 职场文书
廉洁教育学习材料
2014/05/19 职场文书
2014年电话销售工作总结
2014/12/01 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
Python+Appium自动化测试的实战
2021/06/30 Python
船舶调度指挥系统——助力智慧海事
2022/02/18 无线电
python中数组和列表的简单实例
2022/03/25 Python
python如何查找列表中元素的位置
2022/05/30 Python