celery在django项目中实现并发任务和定时任务

news2024/12/28 18:06:56

创建一个django项目

django-admin startproject celeryDemo

进入项目目录

cd celeryDemo

在你的 Django 项目中,创建一个 celery_.py 文件,通常放在项目的根目录(与 settings.py 同级):

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

# 设置 Django 的默认配置模块
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celeryDemo.settings')

app = Celery('celeryDemo')

# 从 Django 的 settings.py 中加载配置
app.config_from_object('django.conf:settings', namespace='CELERY')

# 自动发现任务模块
# app.autodiscover_tasks()
# 列出所有需要的应用
app.autodiscover_tasks(['home']) 

settings.py 中配置 Celery 添加一些基本配置,这里使用 Redis 作为消息代理:

# celery_config
CELERY_BROKER_URL = 'redis://localhost:6379/7'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/8'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'

创建任务 在你的 Django 应用中创建任务,app.tasks.py 文件中 app是你创建的app名 我这里是home

from celery import shared_task

# 定时任务
@shared_task
def my_task():
    # 任务逻辑
    print("Task is running!")
    return "Task done!"

# 并发任务
@shared_task
def add(x, y):
    print(x + y)
    return x + y

在app.views.py里添加视图函数

from django.shortcuts import render
from django.http import HttpResponse, JsonResponse
from home.tasks import add


def trigger_tasks(request):
    for i in range(10):
        add.delay(i, i + 1)  # 异步调用任务
    return HttpResponse("Tasks triggered!")


def trigger_task(request):
    # 调用并发任务
    result = add.delay(4, 6)  # 异步调用任务
    # 获取任务 ID
    task_id = result.id
    return JsonResponse({'task_id': task_id})


def get_result(request, task_id):
    from celery.result import AsyncResult
    result = AsyncResult(task_id)

    if result.ready():  # 检查任务是否完成
        response = {
            'task_id': task_id,
            'status': result.status,
            'result': result.result,  # 获取任务结果
        }
    else:
        response = {
            'task_id': task_id,
            'status': result.status,
            'result': None,
        }
    return JsonResponse(response)

设置定时任务 使用 Celery Beat 来设定定时任务。在你的 settings.py 中添加

from celery.schedules import crontab

CELERY_BEAT_SCHEDULE = {
    'run-my-task-every-midnight': {
        'task': 'home.tasks.my_task',
        # 'schedule': crontab(minute=0, hour=0),  # 每天的 0 点 0 分执行
        'schedule': crontab('*/1'),  # 每1分钟执行一次
    },
}

创建tasks.py

from celery import shared_task

# 定时任务
@shared_task
def my_task():
    # 任务逻辑
    print("Task is running!")
    return "Task done!"

# 并发任务
@shared_task
def add(x, y):
    print(x + y)
    return x + y

设置 URL 路由 在你的 urls.py 中添加相应的 URL 路由,以便可以访问触发任务和获取结果的视图:

# home/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('trigger_tasks/', views.trigger_tasks, name='trigger_tasks'),
    path('trigger-task/', views.trigger_task, name='trigger_task'),
    path('get-result/<str:task_id>/', views.get_result, name='get_result'),
]
# urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('home/', include('home.urls')),
]

启动 Celery Worker 和 Beat 在命令行中,启动 Celery Worker 和 Beat

celery -A celeryDemo worker --loglevel=info --concurrency=4 -P thread

celery -A celeryDemo beat --loglevel=info

启动django项目

python manage.py runserver 8002

监控和调试

确保你能看到 Worker 的日志输出,以验证任务是否成功执行。你可以使用 Flower 来监控 Celery 任务的执行情况:

pip install flower
celery -A celeryDemo flower

然后访问 http://localhost:5555 以查看任务的状态。

调用异步任务返回id
![调用异步任务返回id](https://i-blog.csdnimg.cn/direct/d46c5f92121745eabd5c5bec3223928e.png)

获取异步任务结果
在这里插入图片描述

查看记录
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2231238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ST算法解RMQ问题

题目 代码 #include <bits/stdc.h> using namespace std; const int N 2e510, M 20; int st[N][M]; int n, m; int main() {ios::sync_with_stdio(0);cin.tie(0);cin >> n;for(int i 1; i < n; i)cin >> st[i][0];for(int i 1; (1 << i) < …

国内版Sketchfab平台 - CG美术之家(3D编辑发布篇)

CG美术之家为您提供了一个简便的模型上传流程&#xff0c;让发布您的3D模型变得轻而易举。只需准备好通用的3D模型格式&#xff0c;如OBJ、FBX或STL&#xff0c;您就可以轻松上传并分享您的创作。我们的平台支持在线3D渲染&#xff0c;您只需花费不到一分钟的时间&#xff0c;就…

Rocky Linux 9安装后无法远程ssh密码登录解决

在Rocky Linux 9版本中&#xff0c;为了增加安全性&#xff0c;默认情况下禁用SSH root密码登录。这是系统默认设定的规则&#xff0c;我们同样也可以更改它。   允许Rocky Linux 9 root用户通过ssh登录方法&#xff1a; 1.编辑SSH配置文件 2.找到以下内容 PermitRootLogin …

C语言教程——操作符详解(1)

目录 前言 1.操作符的分类&#xff1a; 2.算数操作符 2.1除法 2.2取模 3.移位操作符 3.1二进制相关知识 3.2左移操作符 3.2.1正数 3.2.2负数 3.2.3结论 3.3右移操作符 4.位操作符 4.1 按位与 4.2按位或 4.3按位异或 ​编辑 5.赋值操作符 6.复合赋值符 7.单目操…

mfc140u.dll丢失怎么办? mfc140u.dll文件缺失的修复技巧

mfc140u.dll 是 Microsoft Foundation Classes (MFC) 库的一部分&#xff0c;它是 Visual Studio 2015 的组件之一&#xff0c;主要服务于使用 C 编写的 Windows 应用程序。这个动态链接库文件包含了 MFC 14.0 Unicode 版本的实现代码&#xff0c;为应用程序提供运行时支持。当…

Golang | Leetcode Golang题解之第520题检测大写字母

题目&#xff1a; 题解&#xff1a; func detectCapitalUse(word string) bool {// 若第 1 个字母为小写&#xff0c;则需额外判断第 2 个字母是否为小写if len(word) > 2 && unicode.IsLower(rune(word[0])) && unicode.IsUpper(rune(word[1])) {return f…

专题九——哈希表

目录 0简介 1两数之和 2判定是否互为字符重排 3存在重复元素 4存在重复元素 II 5字母异位词分组 0简介 1两数之和 oj链接&#xff1a;两数之和 解法1 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {int nnums.size()…

unet中的attn_processor的修改(用于设计新的注意力模块)

参考资料 文章目录 unet中的一些变量的数据情况attn_processorunet.configunet_sd 自己定义自己的attn Processor &#xff0c;对原始的attn Processor进行修改 IP-adapter中设置attn的方法 参考的代码&#xff1a; 腾讯ailabipadapter 的官方训练代码 unet中的一些变量的数据…

客户端时间 与 服务器时间

对客户端时间和服务器有概念&#xff0c;但从来没有这么直观地观察过。直到有一天打开了长久未使用的mac&#xff0c;第一次对时间有了直观的概念&#xff1a; 打开之后就有了上面这样的提示“您的时钟慢了”… 我看了下电脑的时间&#xff0c;然后打开F12获取了下时间&#x…

VLAN高级特性:VLAN聚合

一、VLAN聚合的概述 在一般的三层交换机中&#xff0c;通常是采用一个VLAN对应一个VLANIF接口实现广播域之间的互通&#xff0c;这导致了在一些情况下造成了IP地址的浪费。 因为一个VLAN对应的子网中&#xff0c;子网号&#xff0c;子网广播地址、子网网关地址不能用作VLAN内…

Rust 力扣 - 2653. 滑动子数组的美丽值

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们遍历长度为k的的窗口 因为数据范围比较小&#xff0c;所以我们可以通过计数排序找到窗口中第k小的数 如果小于0&#xff0c;则该窗口的美丽值为第k小的数如果大于等于0&#xff0c;则该窗口的美丽值为0 题…

2024网鼎杯青龙组wp:Crypto1

题目 附件内容如下 from Crypto.Util.number import * from secret import flag from Cryptodome.PublicKey import RSAp getPrime(512) q getPrime(512) n p * q d getPrime(299) e inverse(d,(p-1)*(q-1)) m bytes_to_long(flag) c pow(m,e,n) hint1 p >> (51…

《JVM第2课》类加载子系统(类加载器、双亲委派)

类加载系统加载类时分为三个步骤&#xff0c;加载、链接、初始化&#xff0c;下面展开介绍。 文章目录 1 类加载器1.1 引导类加载器&#xff08;BootStrapClassLoader&#xff09;1.2 拓展类加载器&#xff08;ExtClassLoader&#xff09;1.3 应用类加载器&#xff08;AppClas…

记住电机原理及几个重要公式,搞清楚电机so easy

电机作为电力转换设备&#xff0c;在现代工业、交通以及生活中发挥着无处不在的作用。无论是微型电动机还是大型发电机&#xff0c;它们的工作原理均基于一定的物理学和电磁学原理。 一、电机的基本原理 电机的基本原理可以概括为电能与机械能之间的相互转换。电动机通过电流在…

软件(2)

操作系统 windows、unix、linux、dos都属于操作系统 操作系统的核心部分的主要特点是【常驻内存】 【多用户分时系统】是当今计算机操作系统中最普遍使用的一类操作系统 操作系统的主要功能是【调度】、【监控】和【维护】计算机系统 负责管理计算机中各种独立的硬件&#xff0…

深度学习常用开源数据集介绍【持续更新】

DIV2K 介绍&#xff1a;DIV2K是一个专为 图像超分辨率&#xff08;SR&#xff09; 任务设计的高质量数据集&#xff0c;广泛应用于计算机视觉领域的研究和开发。它包含800张高分辨率&#xff08;HR&#xff09;训练图像和100张高分辨率验证图像&#xff0c;每张图像都具有极高…

计算机图形学中向量相关知识chuizhi

一、向量加法 平行四边形法则 两个向量统一起点&#xff0c;构成平行四边形&#xff0c;对角线为向量加和的结果 三角形法则 两个向量尾首相连&#xff0c;从a起点连接到b终点&#xff0c;为向量加法的结果 多向量首尾相连的加法结果为第一个向量的起点到最后一个向量的终点…

[LitCTF 2023]只需要nc一下~-好久不见6

先nc一下&#xff0c;连接上 ls打开查看里面有什么文件 cat 查看里面有什么内容 这个 Dockerfile 构建了一个基于 Python 3.11 的镜像&#xff0c;将当前目录的文件复制到镜像的 /app 目录&#xff0c;设置了一个环境变量 FLAG&#xff0c;并将其值写入 /flag.txt 文件。工作目…

软考高级之系统架构师之安全攻防技术

攻防包括攻击和防御两部分。 攻击 安全威胁 信息系统的安全威胁来自于&#xff1a; 物理环境&#xff1a;对系统所用设备的威胁&#xff0c;如&#xff1a;自然灾害&#xff0c;电源故障&#xff0c;数据库故障&#xff0c;设备被盗等造成数据丢失或者信息泄露通信链路&…

VLAN间通信以及ospf配置

目录 1.基础知识介绍 1.1 什么是VLAN&#xff1f; 1.2 VLAN有什么用&#xff1f; 1.3 不同VLAN如何实现通信&#xff1f; 1.4 什么是路由汇总&#xff1f; 1.4.1 路由汇总的好处&#xff1a; 2. 实验 2.1 网络拓扑设计 2.2 实验配置要求 2.2.1 三层交换配置&#xff…