celery 组件在django环境应用
第一步安装
1 | pip install celery = = 4.4 |
第二步 配置环境
1 2 3 4 5 6 | # ############################# celery 配置连接redis ############################# #添加密码的 CELERY_BROKER_URL = 'redis://:foobared@127.0.0.1:6379/0' CELERY_ACCEPT_CONTENT = [ 'json' ] CELERY_RESULT_BACKEND = 'redis://:foobared@127.0.0.1:6379/0' CELERY_TASK_SERIALIZER = 'json' |
第三步 【项目/项目/celery.py】在项目同名目录创建 celery.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #!/usr/bin/env python # -*- coding:utf-8 -*- # 拒绝隐式引入,因为celery.py的名字和celery的包名冲突,需要使用这条语句让程序正确运行 from __future__ import absolute_import import os from celery import Celery # set the default Django settings module for the 'celery' program. os.environ.setdefault( 'DJANGO_SETTINGS_MODULE' , 'auction.settings' ) app = Celery( 'auction' ) # Using a string here means the worker doesn't have to serialize # the configuration object to child processes. # - namespace='CELERY' means all celery-related configuration keys # should have a `CELERY_` prefix. app.config_from_object( 'django.conf:settings' ,namespace = 'CELERY' ) # Load task modules from all registered Django app configs. # 去每个已注册app中读取 tasks.py 文件 app.autodiscover_tasks() |
第四步【项目/app名称/tasks.py】
1 2 3 4 5 6 7 8 9 | from celery import shared_task @shared_task def add(x, y): return x + y @shared_task def mul(x, y): return x * y |
第五步
1 2 3 | from .celery import app as celery_app __all__ = ( 'celery_app' ,) |
第六步 启动worker
1 2 3 | 进入项目目录 celery worker - A s - l info - P eventle |
第七步 编写视图函数,调用celery去创建任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | from django.shortcuts import HttpResponse from api.tasks import x1 def create_task(request): print ( '请求来了' ) result = x1.delay( 2 , 2 ) print ( '执行完毕' ) return HttpResponse(result. id ) def get_result(request): nid = request.GET.get( 'nid' ) from celery.result import AsyncResult # from demos.celery import app from demos import celery_app result_object = AsyncResult( id = nid, app = celery_app) # print(result_object.status) data = result_object.get() return HttpResponse(data) |
第八步 启动django程序
1 2 | http: / / 127.0 . 0.1 : 8000 / api / get / task / ?nid = 68d4c97e - 92e5 - 42e4 - a04d - c1a8f35fb4a http: / / 127.0 . 0.1 : 8000 / api / create / task / |
注意事项:
本地时间和URF实际转换:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Python3 : # 本地时间转换成utc时间 utc_ctime = datetime.datetime.utcfromtimestamp(ctime.timestamp()) target_time = utc_ctime + datetime.timedelta(seconds = 10 ) result = x1.apply_async(args = [ 11 , 3 ], eta = target_time) python2 : # “”“本地时间转UTC时间(-8:00)”“” time_struct = time.mktime(ctime.timetuple()) utc_st = datetime.datetime.utcfromtimestamp(time_struct) # utc_ctime = datetime.datetime.utcfromtimestamp(ctime.timestamp()) target_time = utc_st + datetime.timedelta(seconds = 30 ) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!