Django celery异步执行

把python的那套,复制到Django项目可以执行

但是从view执行http://127.0.0.1:8080/async_add/ 报错

复制代码
from django.http import HttpResponse
from file_downloads.tasks import add

def async_add(request):
    result = add.delay(4, 4)
    print(result.id)  # 打印任务ID
    print('here2')
    print(result.__dict__)  # 结果信息
    print('here3')
    print(result.successful())  # 是否成功
    print(result.failed())  # 是否失败
    print(result.ready())  # 是否执行完成
    print(result.state)  # 状态 PENDING -> STARTED -> SUCCESS/FAIL

    # 你可以使用result.ready()来检查任务是否已经完成,然后使用result.get()获取结果。
    value = result.get()  # 任务返回值
    print(result.get())  # 阻塞直到结果准备就绪或超时
    return HttpResponse("Task queued.")

另寻思路

Django Celery, 世界上最牛逼的Django异步任务队列库

Django中使用Celery

下载

pip install django-celery-results

pip install django-celery-beat

pip install diango-redis

1、init.py

复制代码
from .celery import app as celery_app
__all__ = ('celery_app',)

不配置报错

2、celery.py

复制代码
# 导入Celery应用
from celery import Celery
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'download_service.settings')
# 创建Celery应用
app = Celery('download_service')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

3、setting

复制代码
# Celery配置
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0'
CELERY_RESULT_BACKEND = 'django-db'
INSTALLED_APPS += ('django_celery_results','django_celery_beat')

4、task

复制代码
# tasks.py

from celery import shared_task

@shared_task
def my_task(param1, param2):
    # 任务逻辑
    result = param1 + param2
    return result

5、url与view

复制代码
path('async_add/', async_add),

from django.http import HttpResponse
from file_downloads.tasks import my_task

def async_add(request):
    result = my_task.delay(4, 5)
    print(result.id)  # 打印任务ID
    print('here2')
    print(result.__dict__)  # 结果信息
    print('here3')
    print(result.successful())  # 是否成功
    print(result.failed())  # 是否失败
    print(result.ready())  # 是否执行完成
    print(result.state)  # 状态 PENDING -> STARTED -> SUCCESS/FAIL
    print(result.get())  # 阻塞直到结果准备就绪或超时
    return HttpResponse("Task queued.")

6、执行迁移

复制代码
python manage.py makemigrations
python manage.py migrate

8、启动redis与celery,django

redis-server

celery -A download_service worker -l info -P eventlet 项目根目录下执行

python manage.py runserver 8080

9、访问urlhttp://127.0.0.1:8080/async_add/

相关推荐
梦想很大很大4 小时前
使用 Go + Gin + Fx 构建工程化后端服务模板(gin-app 实践)
前端·后端·go
毅炼4 小时前
Java 基础常见问题总结(4)
java·后端
张3蜂4 小时前
深入理解 Python 的 frozenset:为什么要有“不可变集合”?
前端·python·spring
皮卡丘不断更4 小时前
手搓本地 RAG:我用 Python 和 Spring Boot 给 AI 装上了“实时代码监控”
人工智能·spring boot·python·ai编程
想用offer打牌4 小时前
MCP (Model Context Protocol) 技术理解 - 第一篇
后端·aigc·mcp
千寻girling5 小时前
Koa.js 教程 | 一份不可多得的 Node.js 的 Web 框架 Koa.js 教程
前端·后端·面试
爱打代码的小林5 小时前
基于 MediaPipe 实现实时面部关键点检测
python·opencv·计算机视觉
程序员清风5 小时前
北京回长沙了,简单谈谈感受!
java·后端·面试
何中应5 小时前
请求头设置没有生效
java·后端
NPE~5 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化