首页 > 系统相关 >解决celery与django结合后,分别启动celery和django的进程同时调用定时任务的问题

解决celery与django结合后,分别启动celery和django的进程同时调用定时任务的问题

时间:2024-03-01 13:34:10浏览次数:22  
标签:django celery 任务 scheduler 定时 os

  django中引入celery后发现在代码中写如下这样的定时任务,启动celery和django的工程后,他们都会调用这个定时任务导致,任务有的时候会冲突出现奇怪的问题。如何解决请继续看。

scheduler = BackgroundScheduler()
scheduler.add_job(testFunc, 'interval', seconds=60)
scheduler.start()

 解决方法:

 

要让Celery启动时让Django中的scheduler = BackgroundScheduler()失效,只让启动Django的manage.py runserver时定时任务有效果,避免两个进程同时调度定时任务,可以在启动Celery之前检查是否已经有一个Django进程在运行。

 

首先,在settings.py中添加以下代码:

import os
import sys

# 设置环境变量
os.environ['DJANGO_ENABLE_SCHEDULER'] = 'False'

# 检查是否已经有一个Django进程在运行
if 'runserver' in sys.argv:
    os.environ['DJANGO_ENABLE_SCHEDULER'] = 'True'

 然后,在启动定时任务的地方修改代码如下:

from apscheduler.schedulers.background import BackgroundScheduler
import os

def start_scheduler():
    scheduler = BackgroundScheduler()
    # 添加定时任务
    # ...
    scheduler.start()

if os.environ.get('DJANGO_ENABLE_SCHEDULER') == 'True':
    start_scheduler()

 亲测有效,终于解决了一个大问题,解除了很大的隐患。

 

标签:django,celery,任务,scheduler,定时,os
From: https://www.cnblogs.com/yclh/p/18046792

相关文章

  • SpringBoot定时任务:使用shedlock解决SpringBoot分布式定时任务
    第一步:引入shedlock包maven中pom文件添加如下配置:<dependency><groupId>net.javacrumbs.shedlock</groupId><artifactId>shedlock-spring</artifactId><version>4.33.0</version>使用其他版本</dependency>第二步:添加shedlock-p......
  • Django的视图响应机制-一次性响应OR流式响应
    一次性响应:HttpResponse类及其子类、JsonResponse类流式响应:SteamingHttpResponse类、FileResponse类文件下载为例#HttpResponse方式,文件内容一次性响应,仅适合小文件deffile_download(request):withopen('data.txt')asf:c=f.read()returnHttpRespons......
  • 一键搞定定时自动化通知
    一键搞定定时自动化通知您是否经常忘了需要每周要填报工作时长?您的团队是否需要每月定时盘点HC?您是否每月末都在工作群提醒大家更新OKR?这些简单的定时任务是不是经常会忘记或者占用您的精力?如果你也有这些烦恼,是时候来试试这个应用与数据集成平台——阿里云计算巢AppFlow了,它能......
  • 定时提醒再也不用担心忘记啦
    定时提醒再也不用担心忘记啦~~~    好记性不如烂笔头,烂笔头不如靠谱的自动化~~~正在寻找自动化流程编排工具或定时任务工具的朋友们赶紧看过来,为你介绍一款简单配置即可实现自动化定时提醒的平台阿里云计算巢AppFLow。    利用它可以通过简单的几步配置实现自动化定时任务和各......
  • Django项目中使用JWT身份验证
    一、什么是JWTJWT,全称是JSONWebToken,是一个开放标准(RFC7519),它定义了一种紧凑的、自包含的方式,用于在多方之间安全地传输JSON格式的信息。这些信息可以被验证和信任,因为它们是数字签名的。JWT由三部分组成:头部(Header)、负载(Payload)、签名(Signature),每部分之间以.分隔。JWT最常见......
  • 如何使用 vscode 搭建 Django Restful API 开发环境 All In One
    如何使用vscode搭建DjangoRestfulAPI开发环境AllInOnevscode+Django(Python)demos(......
  • 定时任务
    配置接口packagetest;importjava.util.concurrent.TimeUnit;publicinterfaceIScheduledCfg{StringgetName();intgetCount();longgetInitialDelay();longgetCycleTime();TimeUnitgetTimeUnit();}配置类packagetest;importlom......
  • 使用 Python 的 Django 框架开发一套 Web API 项目 All In One
    使用Python的Django框架开发一套WebAPI项目AllInOne游戏广告WebAPIDjango项目vsDjango应用程序一个Project可以包含多个Appsporject是一个可以独立运行的软件包app的运行必须依赖projectapp可以作为可以复用的功能模块使用demosDRF,DjangoR......
  • c# 4.8 实现Windows 定时任务计划(Task Scheduler)
    分享一个我自己写的 Windows定时任务计划(TaskScheduler)动态创建代码,没做太多封装,留个实现笔记首先封装一个简单配置项的类publicclassTaskSchedulerConfig{///<summary>///引用程序路径///</summary>publicstringApplicationPath{get;set;......
  • c# 4.8 实现Windows 定时任务计划(Task Scheduler)
    分享一个我自己写的 Windows定时任务计划(TaskScheduler)动态创建代码,没做太多封装,留个实现笔记首先封装一个简单配置项的类1publicclassTaskSchedulerConfig2{3///<summary>4///引用程序路径5///</summary>6publicstringApplicati......