
官网:
https://django-celery-beat.readthedocs.io/en/latest/
| celery版本 | 系统 | 支持 |
|---|---|---|
| all | Linux | √ |
| 4.0以上 | Windows | × |
| 4.0以下 | Windows | √ |
| 命令 | 作用 |
|---|---|
pip install django-celery-beat |
设置定时或周期任务 |
pip install django-celery-results |
存储任务结果(看情况需要) |
pip install eventlet |
windows下运行celery 4+版本,要装 |
pip install flower |
监控celery运行任务状态 |
django-admin startproject celery_demo # 创建项目python manage.py startapp demo # 创建app
from celery import Celeryfrom django.conf import settingsimport os# 为celery设置环境变量os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celery_demo.settings')# 创建应用app = Celery("demo")# 配置应用app.conf.update(# 配置broker, 这里我们用redis作为brokerBROKER_URL='redis://:332572@127.0.0.1:6379/1',)# 设置app自动加载任务# 从已经安装的app中查找任务# 如果您的 INSTALLED_APPS 设置包括 app1、app2 和 app3,celery 将自动注册任何可以通过查看 app1.tasks、 找到的修饰任务app2.tasks 和 app3.tasksapp.autodiscover_tasks(settings.INSTALLED_APPS)from .tasks import *
from celery_demo.celery import appimport time# 加上app对象的task装饰器# 此函数为任务函数@app.taskdef my_task():print("任务开始执行....")time.sleep(5)print("任务执行结束....")
from django.shortcuts import renderfrom django.http import HttpResponsefrom .tasks import my_taskdef index(request):# 将my_task任务加入到celery队列中# 如果my_task函数有参数,可通过delay()传递# 例如 my_task(a, b), my_task.delay(10, 20)my_task.delay()return HttpResponse("<h1>服务器返回响应内容!</h1>")
from django.conf.urls import urlfrom django.contrib import adminfrom demo.views import indexurlpatterns = [url(r'^admin/', admin.site.urls),url(r'^$', index),]
celery -A celery_demo worker -l info
创建worker等待处理celery队列中任务, 在终端执行命令
python manage.py runserver
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','demo','django_celery_results', # 注意此处应用名为下划线'django_celery_beat', # 插件用来动态配置定时任务,只要进行了第一步pip安装就可以直接注册了]
app.conf.update( CELERYBEAT_SCHEDULER='django_celery_beat.schedulers.DatabaseScheduler',)
python manage.py makemigrations # 不需要make直接下方migrate就可以生成表格python manage.py migrate
| 表名 | models | 释义 |
|---|---|---|
| django_celery_beat_clockedschedule | django_celery_beat.models.ClockedSchedule | 特定时刻任务 |
| django_celery_beat_crontabschedule | django_celery_beat.models.CrontabSchedule | 特定时间表任务,例如每周1运行的计划 |
| django_celery_beat_intervalschedule | django_celery_beat.models.IntervalSchedule | 以特定间隔(例如,每5秒)运行的计划 |
| django_celery_beat_periodictask | django_celery_beat.models.PeriodicTask | 此模型定义要运行的单个周期性任务 |
| django_celery_beat_periodictasks | django_celery_beat.models.PeriodicTasks | 此模型仅用作索引以跟踪计划何时更改 |
| django_celery_beat_solarschedule | django_celery_beat.models.SolarSchedule | 定制任务 |
加上django_celery_results还会有3个表
django_celery_results_chordcounter
django_celery_results_groupresult
django_celery_results_taskresult
celery beat --help
用法:celery beat[选项]启动节拍周期性任务调度程序。beat选项:--detach 分离并作为在后台运行,守护进程。-s、 --schedule TEXT 明细表数据库的路径。默认为`celerybeat-schedule`。扩展名“.db”可以附加到文件名。-S, --scheduler TEXT 要使用的调度程序TEXT调度程序类。--max-interval INTEGER 最大间隔整数两个时间表之间睡眠的最大秒数迭代。-l、 --loglevel[DEBUG|INFO|WARNING|ERROR|CRITICAL|FATAL]日志记录级别。后台处理选项:-f、 --logfile --日志文件文本--pidfile TEXT--uid文本--uid文本--gid文本--umask文本--executable 可执行文本选项:--help显示此消息并退出。