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
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:添加
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
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文件。
添加如下内容:
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