Django高级扩展之系统后台使用celery

如果我们在系统后台想某日某时执行某个任务,或者每隔一段时间执行某个任务,可以使用celery来完成。

目录

安装

安装celery

安装django_celery_beat

celery配置

注册应用

celery配置

修改__init__.py

表迁移

执行迁移

扫描二维码关注公众号,回复: 16191900 查看本文章

控制台运行截图

新增数据表

安装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队列。

猜你喜欢

转载自blog.csdn.net/json_ligege/article/details/131374096