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/

相关推荐
小蒜学长12 小时前
基于Java的公司采购系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·公司采购系统
小坏讲微服务13 小时前
Spring Boot 4 新特性全解析:从上手到生产实战
java·spring boot·后端·架构·springboot4
砚底藏山河13 小时前
python量化入门:多周期数据对齐统一时间轴
java·数据库·python·金融·maven
毕业设计70313 小时前
(免费领源码)django空气净化器销售系统09218- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
python·scrapy·mysql·pycharm·django·flask·pandas
小小张说故事14 小时前
Python 闭包到底捕获了啥?一个计数器例子讲透,别再背定义了
python
深蓝AI14 小时前
AI Agent 点了发布却超时:一条回执丢失,为什么能造成两篇文章?
人工智能·python
怪奇云呼军14 小时前
教育试听预约后没到课,闪电智能 Voice Agent 如何做分层回访?
人工智能·python·算法·云计算·音视频
weixin1997010801615 小时前
《淘宝TOP API:落地方案、接口边界与业务踩坑 —— 聚石塔内外价差 10 倍的真相》(附 Python 源码)
开发语言·python
梦想的颜色15 小时前
【编程实战】AI 时代 APP 开发全栈硬核指南:技术选型 + AI 架构 + 模型落地全维度决策
python·flutter·react native·react.js·ai·桌面应用·milvus
huaweichenai15 小时前
spring boot 实现file文件上传
java·spring boot·后端