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/

相关推荐
装不满的克莱因瓶1 分钟前
从梯度下降到 Adam 优化器:掌握神经网络参数优化的核心原理
人工智能·python·深度学习·神经网络·机器学习·计算机视觉·ai
砍材农夫2 分钟前
物联网实战:Spring Boot MQTT | 客户端框架比对
spring boot·后端·物联网
Gopher_HBo8 分钟前
存储层LSM Tree
后端·架构
糖果店的幽灵14 分钟前
时间序列处理
开发语言·python·pandas
喵叔哟20 分钟前
第2周学习笔记
笔记·python·学习·langchain
copyer_xyf25 分钟前
Python 迭代器与生成器
前端·后端·python
小小测试开发7 小时前
安装 Python 3.10+
开发语言·人工智能·python
梦想不只是梦与想8 小时前
Python 中的装饰器
python·装饰器
我叫唧唧波8 小时前
Python+AI 全栈学习笔记
人工智能·python·学习
copyer_xyf9 小时前
Python 异常处理
前端·后端·python