官网:
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 Celery
from django.conf import settings
import os
# 为celery设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celery_demo.settings')
# 创建应用
app = Celery("demo")
# 配置应用
app.conf.update(
# 配置broker, 这里我们用redis作为broker
BROKER_URL='redis://:332572@127.0.0.1:6379/1',
)
# 设置app自动加载任务
# 从已经安装的app中查找任务
# 如果您的 INSTALLED_APPS 设置包括 app1、app2 和 app3,celery 将自动注册任何可以通过查看 app1.tasks、 找到的修饰任务app2.tasks 和 app3.tasks
app.autodiscover_tasks(settings.INSTALLED_APPS)
from .tasks import *
from celery_demo.celery import app
import time
# 加上app对象的task装饰器
# 此函数为任务函数
@app.task
def my_task():
print("任务开始执行....")
time.sleep(5)
print("任务执行结束....")
from django.shortcuts import render
from django.http import HttpResponse
from .tasks import my_task
def 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 url
from django.contrib import admin
from demo.views import index
urlpatterns = [
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显示此消息并退出。