跳到主要内容

Celery如何实现定时任务?

参考答案:

Celery 是一个分布式任务队列,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他机器上执行。虽然 Celery 本身不提供定时任务的功能,但是它可以与其他的定时任务库(如 APSchedulerdjango-celery-beat)配合使用,实现定时任务的执行。

以下是使用 django-celery-beat 在 Django 项目中实现定时任务的一个基本步骤:

  1. 安装 django-celery-beat 库:
pip install django-celery-beat
  1. 在你的 Django 项目的 settings.py 文件中添加 django_celery_beatINSTALLED_APPS
INSTALLED_APPS = [
    # ...
    'django_celery_beat',
]
  1. 配置 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()
  1. 在 Django 的 admin 界面中,你可以看到 Celery Beat 的配置选项。你可以在这里创建周期性任务。例如,创建一个每天中午12点执行的任务。
  2. 确保你的 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 提供了很多高级的特性,如任务的持久化、失败重试、定时任务的动态调整等。你可以根据你的需求进行更深入的学习和使用。