如果我们在系统后台想某日某时执行某个任务,或者每隔一段时间执行某个任务,可以使用celery来完成。
目录
安装
安装celery
安装django_celery_beat
celery配置
注册应用
celery配置
修改__init__.py
表迁移
执行迁移
控制台运行截图
新增数据表
安装django-celery-results
执行命令
注册应用
创建表
如果出现错误
创建后台管理员账号
创建任务文件
添加任务
周期任务
启动定时任务
总结
安装
安装celery
pip install celery
安装django_celery_beat
系统后台使用定时任务,需要安装额外包:
pip install django_celery_beat
celery配置
注册应用
首先在settings.py中注册应用:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
'django_celery_beat'
]
celery配置
在工程目录下创建celery.py文件
内容如下:
from celery import Celery
from django.conf import settings
import os
# 为celery设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
# 创建应用
app = Celery('project')
# 配置应用
app.conf.update(
# 配置broker, 这里我们用redis作为broker
BROKER_URL='redis://127.0.0.1:6379/1',
# 使用项目数据库存储任务执行结果
CELERY_RESULT_BACKEND='django-db',
# 配置定时器模块,定时器信息存储在数据库中
CELERYBEAT_SCHEDULER='django_celery_beat.schedulers.DatabaseScheduler',
)
# 设置app自动加载任务
# 从已经安装的app中查找任务
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
修改__init__.py
修改工程目录下__init__.py文件,增加以下内容:
from .celery import app as celery_app
__all__ = ['celery_app']
表迁移
由于定时器信息存储在数据库中,需要生成对应表迁移文件,
然后执行迁移操作,创建diango_celery_beat对应表:
执行迁移
python manage.py migrate django_celery_beat
控制台运行截图
新增数据表
安装django-celery-results
celery任务的记录要保存到数据库,就需要安装django-celery-results。
执行命令
pip install -U django-celery-results
注册应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
'django_celery_beat',
'django_celery_results',
]
创建表
python manage.py migrate
数据库增加表
如果出现错误
(1071, 'Specified key was too long; max key length is 1000 bytes')
解决方法
settings.py中添加
DJANGO_CELERY_RESULTS_TASK_ID_MAX_LENGTH = 191
创建后台管理员账号
如果没有创建管理员账号,执行以下命令:
python manage.py createsuperuser
创建任务文件
在子应用目录创建tasks.py文件,设置执行方法:
from celery import shared_task
import time
# 用于定时执行的任务
@shared_task
def schedule_execute():
print("我每隔5秒钟时间执行一次....")
添加任务
登录管理后台Admin:
我们可登录网站后台Admin去添加对应任务。
因为配置了语言,所以显示为中文。周期性任务、定时任务、日程事件、计划任务、间隔都可进行定时任务设置。
周期任务
启动定时任务
celery -A project beat -l info
任务每隔5秒就会执行一次,如果配置了存储,
那么每次任务执行的结果也会被保存到对应的数据库中。
总结
主要步骤为:安装三方类库,后台添加定时任务,命令行启动celery队列。