celery入门

embedded/2025/3/15 2:48:44/

按照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/


http://www.ppmy.cn/embedded/172648.html

相关文章

Spring Boot 项目中application.yml 和 bootstrap.yml 文件的区别

application.yml 和 bootstrap.yml 文件都是 Spring Boot 项目中用于配置应用程序的 YAML 或 Properties 文件,但它们在加载顺序、用途和优先级上存在关键的区别。 核心区别概览: 特性bootstrap.yml / bootstrap.propertiesapplication.yml / application.propert…

STM32之I2C硬件外设

注意:硬件I2C的引脚是固定的 SDA和SCL都是复用到外部引脚。 SDA发送时数据寄存器的数据在数据移位寄存器空闲的状态下进入数据移位寄存器,此时会置状态寄存器的TXE为1,表示发送寄存器为空,然后往数据控制寄存器中一位一位的移送数…

linux centos 忘记root密码拯救

在CentOS 7中,如果忘记root密码,可以通过修改系统启动参数进入单用户模式或紧急模式进行重置。以下是两种常用方法,适用于物理机或虚拟机环境: 方法一:通过rd.break参数重置密码 步骤: 重启系统并进入GRU…

Yashan DB 应用开发

一、YashanDB支持的驱动 YashanDB支持多种驱动,包括JDBC、C、Python、ADO.NET、ODBC等。以下是详细介绍: 1.JDBC驱动 • 定义:JDBC是Java连接数据库的技术统称。Java语言只提供规范(接口),规定数据库操作…

益百分用科技与艾文化深度融合重新定义艾草产业

益百分用科技与艾文化深度融合重新定义艾草产业 益百分是一家致力于用科技赋能艾文化的企业,专注于将现代科技与传统艾草文化相结合,推动艾草产业的创新与发展。通过科技手段,益百分旨在提升艾草产品的品质、生产效率以及用户体验&#xff0…

查询MySQL表占用磁盘大小的方法

最近有个需求需要查询MySQL表所占的体积(磁盘空间)大小,有几个方法记录一下: 1. 使用 INFORMATION_SCHEMA 数据库 这是最常用的方法,可以查询单个表或整个数据库的大小: -- 查询特定表的大小 SELECT table_name AS 表名,ROUND(data_length/1024/1024,…

解决Windows版Redis无法远程连接的问题

🌟 解决Windows版Redis无法远程连接的问题 在Windows系统下使用Redis时,很多用户会遇到无法远程连接的问题。尤其是在配置了Redis并尝试通过工具如RedisDesktopManager连接时,可能会报错“Cannot connect to ‘redisconnection’”。今天&am…

自动化测试框架学习总结

视频:hytest - 测试自动化框架_哔哩哔哩_bilibili 资料:hytest 框架 - 白月黑羽 hytest 简介 hytest (黑羽test)是白月黑羽自己研发的自动化测试框架,它非常适合 做 系统测试 自动化, 而相比之下&#x…