celery与django的结合以及定时任务配置
一、conda创建新的开发环境
C:\Users\yc>conda create --name celery_django python=3.8
C:\Users\yc>conda info -e
py38 * D:\ProgramData\Anaconda3\envs\py38
celery_django D:\ProgramData\Anaconda3\envs\celery_django
#切换到新的环境中
C:\Users\yc>activate celery_django
py38 D:\ProgramData\Anaconda3\envs\py38
celery_django * D:\ProgramData\Anaconda3\envs\celery_django
二、创建django工程
1、安装django3.2
conda install Django==3.2
如果报错:使用 pip install Django==3.2 安装
2、创建django工程
D:\pythonProject2023>django-admin startproject celeryDjagno
3、使用pyCharm打开新建的项目,选择新建的虚拟环境
启动后浏览器访问http://127.0.0.1:8000/出现如下页面说明django项目搭建成功。
安装celery
pip install celery== 5.3.6
pip install django-redis==5.3.0
pip install eventlet 注:不安装这个win10执行方法时会报错
创建一个新的文件:celeryDjagno\celeryDjagno\celery.py
1 2 3 4 5 6 7 8 | from __future__ import absolute_import, unicode_literals import os from celery import Celery os.environ.setdefault( 'DJANGO_SETTINGS_MODULE' , 'celeryDjagno.settings' ) app = Celery( 'celeryDjagno' ) app.config_from_object( 'django.conf:settings' , namespace = 'CELERY' ) app.autodiscover_tasks() |
在celeryDjagno\celeryDjagno\__init__.py:添加
1 2 3 4 5 6 | from __future__ import absolute_import, unicode_literals from .celery import app as celery_app __all__ = [ 'celery_app' ] |
settings.py文件中添加celery配置:
redis的环境自己先安装好,不会的参考连接https://www.cnblogs.com/yclh/p/14742336.html
1 2 3 | CELERY_TASK_SERIALIZER = 'json' CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0' # Broker配置,使用Redis作为消息中间件 CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/1' # BACKEND配置,这里使用redis |
注:配置是使用redis作为消息队列,消息的代理和结果都是用redis,任务的序列化使用json格式。
四、创建app,编写celery的函数
1、创建app
(celery_django) D:\pythonProject2023\celeryDjagno>python manage.py startapp celery_task
创建完新的app后如何激活参照https://www.cnblogs.com/yclh/p/17127839.html 这里就不在复述。
2、在celery_task 目录下创建tasks.py文件。
添加如下内容:
1 2 3 4 5 6 7 | from celery import shared_task @shared_task def add(x,y): print ( '---------------' + str (x + y)) return x + y |
3、启动celery
D:\pythonProject2023\celeryDjagno> celery -A celeryDjagno worker -l info -P eventlet
注:-P eventlet不加win10环境下不加会报错 Task handler raised error: ValueError('not enough values to unpack (expected 3, got 0)')
启动成功:
4、Dos窗口调用方法发送任务
C:\Users\yc>curl http://127.0.0.1:8000/celery/add
Celery的执行结果
Dos窗口调用方法查看任务执行状态和结果
C:\Users>curl http://127.0.0.1:8000/celery/status?id=f92166ef-ec07-4dc4-9f2e-8995dfdd3d16
五、定时任务
1、写一个定时执行的任务
2、celery里添加定时执行的任务配置,可以时间间隔也可以使用crontab表达式
3、执行定时任务
(celery_django) D:\pythonProject2023\celeryDjagno>celery -A celeryDjagno beat -l info
成功后如下图看到每3秒就把任务放进任务队列
4、启动worker (这个和上一个同时启动)
D:\pythonProject2023\celeryDjagno> celery -A celeryDjagno worker -l info -P eventlet
成功后可以看到如下方法执行结果:
源码获取方式(免费):
(1)登录-注册:http://resources.kittytiger.cn/
(2)搜索:django项目中使用celery
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!