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实现在pickling的时候压缩的方法
Sep 25 Python
Python实现的批量下载RFC文档
Mar 10 Python
python中abs&map&reduce简介
Feb 20 Python
Python生成一个迭代器的实操方法
Jun 18 Python
Python求两点之间的直线距离(2种实现方法)
Jul 07 Python
Python3分析处理声音数据的例子
Aug 27 Python
python通过实例讲解反射机制
Oct 17 Python
python set集合使用方法解析
Nov 05 Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 Python
Python工程师必考的6个经典面试题
Jun 28 Python
python树莓派通过队列实现进程交互的程序分析
Jul 04 Python
Python安装使用Scrapy框架
Apr 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判断浏览器的类型和语言的函数代码
2013/02/28 PHP
PHP字符串的递增和递减示例介绍
2014/02/11 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
jQuery实现原理的模拟代码 -6 代码下载
2010/08/16 Javascript
拥抱模块化的JavaScript
2012/03/07 Javascript
基于jquery tab切换(防止页面刷新)
2012/05/23 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
javaScript NameSpace 简单说明介绍
2013/07/18 Javascript
js中的异常处理try...catch使用介绍
2013/09/21 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
jQuery跨域问题解决方案
2015/08/03 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
2015/09/01 Javascript
JavaScript DOM 对象深入了解
2016/07/20 Javascript
基于jQuery制作小图标上下滑动特效
2017/01/18 Javascript
JavaScript requestAnimationFrame动画详解
2017/09/14 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
在element-ui的select下拉框加上滚动加载
2019/04/18 Javascript
你或许不知道的一些npm实用技巧
2019/07/04 Javascript
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
Python编写检测数据库SA用户的方法
2014/07/11 Python
Python类的多重继承问题深入分析
2014/11/09 Python
Python实现自动登录百度空间的方法
2017/06/10 Python
快速查询Python文档方法分享
2017/12/27 Python
python入门教程 python入门神图一张
2018/03/05 Python
Php多进程实现代码
2018/05/07 Python
Python 高效编程技巧分享
2020/09/10 Python
python 基于UDP协议套接字通信的实现
2021/01/22 Python
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
初中学校军训方案
2014/05/09 职场文书
机电专业求职信
2014/06/14 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
个人求职意向书
2015/05/11 职场文书
2015中学政教处工作总结
2015/07/22 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书