在构建和扩展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










