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处理路由参数和查询参数
后端
bobz96520 分钟前
5070TI 本地推理
后端
bobz9651 小时前
gpt-oss-20b-base 是基础模型
后端
阿群今天学习了吗1 小时前
“鱼书”深度学习进阶笔记(3)第四章
人工智能·笔记·python·深度学习·算法
澡点睡觉1 小时前
golang的继承
开发语言·后端·golang
David爱编程2 小时前
JDK vs JRE:到底有什么本质区别?99% 的人都答不上来
java·后端
Pi_Qiu_3 小时前
Python初学者笔记第二十二期 -- (JSON数据解析)
笔记·python·json
技术老金3 小时前
LangGraph入门与避坑指南:从ReAct到复杂流程编排
人工智能·python
架构师沉默3 小时前
外卖平台每天1000万订单查询,是如何扛住高并发的?
java·后端·架构
coding随想3 小时前
网络层的“四骑士”:深入浅出IP、ICMP、ARP、RARP协议
后端·网络协议