如何使用Celery和Docker处理Django中的定期任务

2020-06-17 07:27:11易采站长站整理

在构建和扩展Django应用程序时,不可避免地需要定期在后台自动运行某些任务。

一些例子:

生成定期报告

清除缓存

发送批量电子邮件通知

执行每晚维护工作

这是构建和扩展不属于Django核心的Web应用程序所需的少数功能之一。幸运的是,Celery提供了一个强大的解决方案,该解决方案非常容易实现,称为Celery Beat。

在下面的文章中,我们将向您展示如何使用Docker设置Django,Celery和Redis,以便通过Celery Beat定期运行自定义Django Admin命令。

依存关系:

Django v3.0.5

Docker v19.03.8

Python v3.8.2

芹菜v4.4.1

Redis v5.0.8

Django + Celery系列:

Django和Celery的异步任务

使用Celery和Docker处理Django中的定期任务(本文!)

目标

在本教程结束时,您应该能够:

使用Docker容器化Django,Celery和Redis

将Celery集成到Django应用中并创建任务

编写自定义Django Admin命令

安排自定义Django Admin命令以通过Celery Beat定期运行

项目设置

django-celery-beat
存储库中克隆基础项目,然后签出基础分支:

$ git clone
https://github.com/testdrivenio/django-celery-beat
–branch base –single-branch
$ cd django-celery-beat

由于我们总共需要管理四个流程(Django,Redis,worker和Scheduler),因此我们将使用Docker通过连接起来简化它们的工作流程,从而使它们都可以通过一个命令从一个终端窗口运行 。

从项目根目录创建映像,并启动Docker容器:


$ docker-compose up -d --build
$ docker-compose exec web python manage.py migrate

构建完成后,导航至http:// localhost:1337以确保该应用程序能够按预期运行。 您应该看到以下文本:

Orders
 No orders found!

项目结构:

├── .gitignore
├── docker-compose.yml
└── project
    ├── Dockerfile
    ├── core
    │   ├── __init__.py
    │   ├── asgi.py
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    ├── entrypoint.sh
    ├── manage.py
    ├── orders
    │   ├── __init__.py
    │   ├── admin.py
    │   ├── apps.py
    │   ├── migrations
    │   │   ├── 0001_initial.py