Django+Nginx+uWSGI 定时任务的实现方法
作者:Yojunsir 发布时间:2022-11-14 16:02:57
标签:Django,Nginx,uWSGI,定时任务
摘要
在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
来源:https://blog.csdn.net/weixin_42488624/article/details/122255752


猜你喜欢
- 使用el-upload 上传视频总是报404错误,具体也不知道什么原因(如有知道的请评论告知,谢谢),去网上查了很多,代码写法确定
- 一、数据库的备份1、选择要备份的数据库“accountInfo”,点击鼠标右键 → 任务 → 备份2、在打开的“备份数据库 —account
- python中是通过套接字即socket来实现UDP及TCP通信的。有两种套接字面向连接的及无连接的,也就是TCP套接字及UDP套接字。TC
- 前言本文参考PyTorch官网的教程,分为五个基本模块来介绍PyTorch。为了避免文章过长,这五个模块分别在五篇博文中介绍。Part3:使
- 在看论文《Detecting Regions of Maximal Divergence for Spatio-Temporal Anoma
- 引言最近公司换了电脑,系统也从 win7 升级到 win11,开发环境都重新安装了一遍,然后在 idea 用mvn 执行打包命令 mvn c
- 1、工厂模式在面向对象编程中,工厂模式是开发过程中最常用的设计模式之一,属于创建型模式,就是通过一个接口函数或对象来创建其他对象并返回,该模
- Entry(输入框)组件通常用于获取用户的输入文本。何时使用 Entry 组件?Entry 组件仅允许用于输入一行文本,如果用于输入的字符串
- 简介最近在整理我们项目代码的时候,发现有很多活动的代码在结构和提供的功能上都非常相似。为了方便今后的开发,我花了一点时间编写了一个生成代码框
- 作者:做梦的人(小姐姐)出处:https://www.cnblogs.com/chongyou/因为最近在做平台,发现有同事,使用djang
- 基本概述我们知道MySQL有2种方式指定复制同步的方式,分别为:基于binlog文件名及位点的指定方式 - 匿名事
- 前言任务描述:当前有一份excel表格数据,里面存在缺失值,需要对缺失的数据到es数据库中进行查找并对其进行把缺失的数据进行补全。excel
- 没错,全网最帅的比卡丘在我这~~~为了访问 Python 库,您需要将它导入到您的 Python 环境中,使用以下命令将其导入 turtle
- 下边我就简单说一下过程和原理。第一步:实现一个匿名函数并能自己执行。(function(){ })() 这个函数在一样编的好的J
- 本文介绍了让我们先来预览一下代码运行效果吧:首先分析163邮箱登陆页面的网页结构(按F12或单击鼠标右键选择审查元素)1、定位到登陆框(注意
- 目录写在前面基本概念Windows搭建python开发环境从Hello World开始博客总结从大学开始玩python到现在参加工作,已经有
- 在日常开发中,我们进行用户登录的时候,大部分情况下都会使用 session 来保存用户登录信息,并以此为依据判断用户是否已登录。但其实 HT
- 我们先来看一个题目:<script> console.log(typeof a)//undefined var a='l
- 对于一个给定的字符串,逆序输出,这个任务对于python来说是一种很简单的操作,毕竟强大的列表和字符串处理的一些列函数足以应付这些问题 了,
- 很久没有跟其他人做重构思想方面的交流了,可能大家都觉得不太好意思讨论,特别是“分离”的思想这么基础的话题,拿出来说怕会被“笑话”。做为页面重