1. 实验环境
python版本:3.7.8
django版本:3.2.15
celery版本:5.2.7
django-celery版本:3.2.1
django-celery-beat版本:2.4.0
django-celery-results版本:2.4.0
django-redis版本:5.2.0
eventlet版本:0.33.3 (这个在windows下测试使用)
2. 根据以上安装模块,主要安装:
django-celery-beat模块:用于定时任务
django-celery-results模块:用于保存结果数据
3. django配置
假设我的项目名称为:ManagerCenter, 应用名称为:task_app
- 创建文件:ManagerCenter / ManagerCenter / celery.py
import os from celery import Celery from django.conf import settings # 设置celery的环境变量和django-celery的工作目录 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ManagerCenter.settings") # 实例化celery应用 app = Celery("ManagerCenter") # 加载celery配置 app.config_from_object(settings) # 如果在项目中,创建了task.py,那么celery就会沿着app去查找task.py来生成任务 app.autodiscover_tasks()
- 设置配置文件: ManagerCenter / ManagerCenter / settings.py
INSTALLED_APPS = [ ...... 'django_celery_results', 'django_celery_beat', ] CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json' CELERY_ACCEPT_CONTENT=['json'] CELERY_TIMEZONE = 'Asia/Shanghai' CELERY_ENABLE_UTC = True BROKER_URL = 'redis://172.172.172.188:6379/1' # redis数据库地址,中间人用于接收任务入队列 CELERY_RESULT_BACKEND = 'django-db' # 使用数据库接收返回的结果 CELERYBEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
- 编辑文件: ManagerCenter / ManagerCenter / __init__.py
from .celery import app as celery_app __all__ = ['celery_app']
- 创建任务文件:task_app / tasks.py
from __future__ import absolute_import, unicode_literals from ManagerCenter.celery import app @app.task() def add(): HttpResponseprint('11111111') return 1 + 2
4. 启动运行django服务,我是使用pycharm开发测试,直接启动完成
5. 进入到ManagerCenter目录下,打开doc窗口,运行如下:
- python.exe .\manage.py migrate django_celery_beat
- python.exe .\manage.py migrate django_celery_results
执行完成后,会在数据库中生成: beat和result的相关表
6. 登录django的管理控制台: http://127.0.0.1:8000/admin ,会看到:CELERY RESULTS(这个是收集结果)标签块和PERIODIC TASKS标签块(这个是存放定时任务)
创建一个定时任务:
新建:“crontabs”,在 minutes:设置 */1 (表示每分钟执行一次),保存。
新建:“periodjc tasks”,
name : 自定义, Task (registered): 选择 task_app.tasks.add, Crontab Schedule: 选择上一步创建的, 最后保存即可。
7. 启动celery,进入到ManagerCenter目录下
- 首先启动worker异步任务:
windows: celery.exe -A ManagerCenter worker -l info -P eventlet
linux: celery.exe -A ManagerCenter worker -l info
- 然后启动beat丁定时任务:
celery -A ManagerCenter beat -l info标签:beat,app,py,results,django,celery,ManagerCenter From: https://www.cnblogs.com/zy6103/p/17190080.html
等1分钟就能看到beat窗口出现发送任务队列。 worker窗口出现任务结果数据。
结尾:以上可以实现一个定时任务的测试