Celery如何实现定时任务?
参考答案:
Celery 是一个分布式任务队列,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他机器上执行。虽然 Celery 本身不提供定时任务的功能,但是它可以与其他的定时任务库(如 APScheduler
或 django-celery-beat
)配合使用,实现定时任务的执行。
以下是使用 django-celery-beat
在 Django 项目中实现定时任务的一个基本步骤:
- 安装
django-celery-beat
库:
pip install django-celery-beat
- 在你的 Django 项目的
settings.py
文件中添加django_celery_beat
到INSTALLED_APPS
:
INSTALLED_APPS = [
# ...
'django_celery_beat',
]
- 配置 Celery。在项目的
__init__.py
文件中,或者在任意一个 Django app 的__init__.py
文件中,创建 Celery 实例并配置它:
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
# 设置 Django 的默认设置模块
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
app = Celery('myproject')
# 使用字符串的方式导入 Django 的设置文件,而不是直接导入
app.config_from_object('django.conf:settings', namespace='CELERY')
# 自动从所有已注册的 Django app 的 tasks.py 文件中加载任务
app.autodiscover_tasks()
- 在 Django 的
admin
界面中,你可以看到Celery Beat
的配置选项。你可以在这里创建周期性任务。例如,创建一个每天中午12点执行的任务。 - 确保你的 Celery worker 和 Celery Beat scheduler 正在运行。这可以通过使用命令行工具来实现:
celery -A myproject worker --loglevel=info
celery -A myproject beat --loglevel=info
这样,你就配置好了一个基于 Django 和 Celery 的定时任务系统。当到达指定的时间时,Celery Beat 会将任务发送到消息队列中,然后由 Celery worker 来执行这些任务。
注意,这只是一个基础的配置,Celery 和 django-celery-beat 提供了很多高级的特性,如任务的持久化、失败重试、定时任务的动态调整等。你可以根据你的需求进行更深入的学习和使用。