当前位置: 首页 > news >正文

celery入门

按照Celery 官方文档,用 Django + Celery + Redis 写的一个简单项目

如需转载,标记出处

环境准备

1. 安装依赖

pip install django celery redis

创建 Django 项目

1. 创建 Django 项目和 APP

django-admin startproject myproject

cd myproject

python manage.py startapp myapp

2. 注册 APP

在 myproject/settings.py 中添加 myapp:

INSTALLED_APPS = [

    ...,

    'myapp',

]

配置 Celery

1. 创建 celery.py 文件(项目根目录)

在 myproject/celery.py:

import os

from celery import Celery

# 设置 Django 配置文件路径

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

# 实例化 Celery

app = Celery('myproject')

# 使用 Django 配置

app.config_from_object('django.conf:settings', namespace='CELERY')

# 自动发现任务

app.autodiscover_tasks()

@app.task(bind=True)

def debug_task(self):

    print(f'Request: {self.request!r}')

2. 修改 __init__.py(项目目录 myproject/)

让 Django 项目启动时自动加载 Celery

# 导入 celery 应用

from .celery import app as celery_app

__all__ = ('celery_app',)


Celery 配置(在 settings.py)

# Redis 作为 Broker 和 Backend

CELERY_BROKER_URL = 'redis://localhost:6379/0'

CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

如果你这里出现了错误,可以看下我的celery报错文章


创建异步任务

myapp/tasks.py 中定义任务

from celery import shared_task

@shared_task

def add(x, y):

    return x + y


视图中调用任务

在 myapp/views.py:

from django.http import JsonResponse

from .tasks import add

def add_task(request):

    # 异步调用 Celery 任务

    result = add.delay(4, 6)

    return JsonResponse({"task_id": result.id})


配置路由

在 myapp/urls.py:

from django.urls import path

from . import views

urlpatterns = [

    path('add/', views.add_task, name='add_task'),

]

在 myproject/urls.py:

from django.contrib import admin

from django.urls import path, include

urlpatterns = [

    path('admin/', admin.site.urls),

    path('', include('myapp.urls')),

]


启动服务

1. 启动 Redis

redis-cli

2. 启动 Django

python manage.py runserver

3. 启动 Celery Worker

celery -A myproject worker --loglevel=info


测试项目

访问异步任务接口:

http://127.0.0.1:8000/add/

相关文章:

  • 探讨Deveco Studio常见问题及解决方案,分享快速排障方法
  • Android Framework 之了解系统启动流程一
  • Shp文件转坐标并导出到Excel和JSON(arcMap + excel)
  • NCCL如何打印XML拓扑文件,操作说明和源码展示
  • VIC水文模型
  • 打靶练习-W1R3S、JARBAS、SickOS、Prime
  • 【每日学点HarmonyOS Next知识】tab对齐、相对布局、自定义弹窗全屏、动画集合、回到桌面
  • 【Unity网络同步框架 - Nakama研究(二)】
  • 基于NXP+FPGA永磁同步电机牵引控制单元(单板结构/机箱结构)
  • Simulink指导手册笔记②--快捷键及基本操作
  • C51 Proteus仿真实验17:数码管显示4×4键盘矩阵按键
  • CesiumforUE中Cesium3DTileset中高频使用的组件概述
  • 【最新】 ubuntu24安装 1panel 保姆级教程
  • Flutter PopScope对于iOS设置canPop为false无效问题
  • 网络安全信息收集[web子目录]:dirsearch子目录爆破全攻略以及爆破字典结合
  • 用python代码将excel中的数据批量写入Json中的某个字段,生成新的Json文件
  • 如何判断一个项目用的是哪个管理器
  • PhotoMill X for Mac v2.8.1 图片批量编辑工具 支持M、Intel芯片
  • TypeScript 高级类型 vs JavaScript:用“杂交水稻”理解类型编程
  • AWK 入门教程:强大的文本处理工具
  • 中巡组在行动丨①震慑:这些地区有官员落马
  • 融创中国:境外债务重组计划聆讯定于9月15日召开
  • “11+2”复式票,宝山购彩者领走大乐透1170万头奖
  • 香港暂停进口美国北达科他州一地区禽肉及禽类产品
  • 白玉兰奖征片综述丨综艺市场破局焕新,多元赛道重塑价值坐标
  • 民企老板被错羁212天续:申请国赔千万余元,要求恢复名誉赔礼道歉