django celery period 周期 例子

本文介绍了如何使用Django结合Celery的django-celery-beat模块创建周期性任务。系统运行依赖web服务、CeleryWorker和CeleryBeat,其中Beat监视数据库中的任务,Worker执行由Beat传递的任务,执行结果存储在resultbackend(通常是数据库)中。

django celery period 周期 例子

Django 借助 Celery 实现计划任务排期及调度系统(django-celery-beat) good
https://www.jianshu.com/p/f22346379dbe

https://django-celery-results.readthedocs.io/en/latest/
https://django-celery-beat.readthedocs.io/en/latest/

五、运行测试
为了使系统正常运行,需要同时开启三个服务:

web 服务:python manage.py runserver 0.0.0.0:8000
Celery Worker:celery -A schedule_task worker -l info
Celery Beat:celery -A schedule_task beat -l info
服务成功运行后,输出信息如下

Celery Beat 持续监测数据库中存储的计划任务信息,将满足触发条件的任务传递给 Celery Worker 执行:

Celery Worker 负责执行由 Beat 传过来的任务,输出执行结果并将结果保存至 result backend(即数据库):

### 如何在 Django 中使用 Celery 设置周期任务 #### 1. 安装依赖库 为了实现 DjangoCelery 的集成以及支持周期任务功能,需要安装以下 Python 库: - `celery`: 提供核心的任务队列功能。 - `django-celery-beat`: 支持通过数据库管理周期任务。 可以通过 pip 安装这些库: ```bash pip install celery django-celery-beat ``` --- #### 2. 创建 Celery 配置文件 在项目的根目录下(通常是 settings.py 所在的目录),创建一个新的文件名为 `celery.py`。该文件用于初始化 Celery 对象并加载必要的配置[^1]: ```python import os from celery import Celery os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project_name.settings') app = Celery('your_project_name') app.config_from_object('django.conf:settings', namespace='CELERY') app.autodiscover_tasks() ``` > **注意**: 将 `your_project_name` 替换为实际的 Django 项目名称。 --- #### 3. 修改 `__init__.py` 为了让 Django 启动时自动加载 Celery 配置,在同一目录下的 `__init__.py` 文件中添加如下代码[^1]: ```python from .celery import app as celery_app __all__ = ('celery_app',) ``` 这一步确保了当 Django 加载应用时会一并加载 Celery 配置。 --- #### 4. 更新 `settings.py` 在 Django 的 `settings.py` 文件中,添加或修改以下配置项以支持 Celery 及其周期任务功能[^2][^3]: ```python # Celery Broker URL (推荐使用 Redis 或 RabbitMQ) CELERY_BROKER_URL = 'redis://localhost:6379/0' # 结果存储后端 (可选) CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' # 数据库调度器 (启用 djcelery.schedulers.DatabaseScheduler) CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler' ``` 如果未安装 Redis,则可以替换为其他消息中间件(如 RabbitMQ)。同时,确保 Redis 已经运行在本地主机上。 --- #### 5. 初始化数据库表结构 由于启用了 `django-celery-beat` 插件,因此需要迁移数据库以生成相关的表结构: ```bash python manage.py migrate ``` 此时会在数据库中看到由 `django-celery-beat` 自动生成的一系列表格,例如 `django_celery_beat_periodictask` 等。 --- #### 6. 添加周期任务 有多种方式定义周期任务,以下是两种常见方法: ##### 方法一:使用 `@periodic_task` 装饰器 可以在任意模块中定义一个简单的周期任务函数,并用 `@periodic_task` 装饰它[^4]: ```python from celery import shared_task from celery.schedules import crontab from your_app.tasks import periodic_task @shared_task def my_periodic_task(): print("This task runs every minute.") my_periodic_task.apply_async(countdown=60) # 每分钟触发一次 ``` 或者更复杂的 Crontab 表达式也可以被接受: ```python @periodic_task(run_every=crontab(hour=8, minute=0)) def daily_report(): """ 每天早上 8 点发送报告邮件 """ send_email_to_admins() ``` ##### 方法二:通过 Admin 页面手动配置 另一种灵活的方式是在后台管理系统中动态添加周期任务。访问 `/admin/django_celery_beat/periodictask/add/` 并填写相应的字段来设定新任务的时间间隔、参数等内容。 --- #### 7. 启动 Celery Worker 和 Beat 完成上述步骤之后,分别启动 Celery worker 和 beat 来处理任务队列和计划任务: ```bash # 启动 Celery Worker celery -A your_project_name worker --loglevel=info # 启动 Celery Beat Scheduler celery -A your_project_name beat --loglevel=info ``` 两个进程应保持独立运行状态以便更好地监控各自的工作情况。 --- ### 总结 综上所述,借助于 `django-celery-beat` 插件能够轻松实现在 Django 应用中的复杂定时作业安排机制。只需按照前述指南逐步操作即可快速部署一套完整的解决方案[^1]^. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值