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 语言并发编程的 “工具箱”
后端·面试·go
用户83562907805136 分钟前
Python 实现 PowerPoint 形状动画设置
后端·python
用户908324602731 小时前
Spring Boot 缓存架构:一行配置切换 Caffeine 与 Redis,透明支持多租户隔离
后端
tyung1 小时前
zhenyi-base 开源 | Go 高性能基础库:TCP 77万 QPS,无锁队列 16ns/op
后端·go
子兮曰1 小时前
Humanizer-zh 实战:把 AI 初稿改成“能发布”的技术文章
前端·javascript·后端
桦说编程1 小时前
你的函数什么颜色?—— 深入理解异步编程的本质问题(上)
后端·性能优化·编程语言
ponponon2 小时前
时代的眼泪,nameko 和 eventlet 停止维护后的项目自救,升级和替代之路
python
Flittly2 小时前
【从零手写 ClaudeCode:learn-claude-code 项目实战笔记】(5)Skills (技能加载)
python·agent
百度地图汽车版2 小时前
【AI地图 Tech说】第九期:让智能体拥有记忆——打造千人千面的小度想想
前端·后端
敏编程2 小时前
一天一个Python库:pyarrow - 大规模数据处理的利器
python