Django Celery Beat 實現定時任務

隨著Web應用程序的規模和複雜性的增加,執行一些長時間運行的任務,例如數據清理,報表生成等不適宜放到Web請求周期中,而應該作為一項後台處理任務進行。對於這類任務,我們通常使用Celery作為任務隊列,但Celery本身不提供定時任務調度的功能,因此需要使用Celery Beat。

一、安裝Django Celery Beat

首先,我們需要安裝Django Celery Beat:

pip install django-celery-beat

並將其添加到INSTALLED_APPS中:

# settings.py

INSTALLED_APPS = [
    ...
    'django_celery_beat',
]

二、配置Celery Beat

要在應用程序使用Celery Beat,必須配置Celery Beat的調度器。我們可以使用文件(也可以使用資料庫,或任何Celery支持的後端)來配置調度器。在項目的根目錄創建一個名為celery.py的文件,並添加以下內容:

# celery.py

import os
from celery import Celery
from datetime import timedelta

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_project.settings')

app = Celery('my_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.conf.beat_schedule = {
    'task-name': {
        'task': 'myapp.tasks.task_name',
        'schedule': timedelta(seconds=60),
    },
}
app.autodiscover_tasks()

這定義了一個名為task-name的簡單任務,它將在60秒後運行。其中,’myapp.tasks.task_name’是將要運行的任務的路徑。schedule定義執行任務的頻率,timedelta(seconds=60)表示每60秒運行一次。

最後一步是啟動Celery Beat調度器,並將其綁定到Django。

# celery.py

from celery import Celery
from django.conf import settings
from datetime import timedelta

app = Celery('my_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.conf.beat_schedule = {
    'task-name': {
        'task': 'myapp.tasks.task_name',
        'schedule': timedelta(seconds=60),
    },
}

app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

現在,我們已經讓Celery Beat調度器知道了要執行的任務及其頻率。接下來我們需要為這個任務寫一個處理函數。

三、編寫Celery任務

在我們的應用程序中,創建一個tasks.py文件,並在其中添加以下內容:

# tasks.py

from celery.decorators import task

@task
def task_name():
    # do something here

任務的處理函數可以根據具體需要實現。這裡,我們僅僅定義了一個空函數。

四、啟動Celery Worker和Beat

我們已經配置好了Celery Beat任務調度器並編寫了處理任務的處理函數。要啟動這兩個服務,需要在終端中執行以下命令。

$ celery -A my_project worker -l info
$ celery -A my_project beat -l info

現在,Celery Beat將會在每60秒調用我們的任務處理函數。

五、調整Celery Beat的配置和API

在上面的示例中,我們定義了一個簡單的任務調度程序示例。Celery Beat還提供了更多高級功能和選項,可以通過設置Celery配置來更改其設置。

更多信息請查看Django Celery Beat文檔:https://docs.celeryproject.org/en/stable/userguide/periodic-tasks.html#django-celery-beat-database-backed-periodic-tasks

原創文章,作者:FQCGW,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/329691.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
FQCGW的頭像FQCGW
上一篇 2025-01-14 18:55
下一篇 2025-01-14 18:55

相關推薦

  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Saturn 定時任務用法介紹

    本文將從以下幾個方面對Saturn定時任務進行詳細的闡述: 一、Saturn 定時任務簡介 Saturn是一個分散式任務調度系統,支持在線添加、修改定時任務,支持多種任務類型,如J…

    編程 2025-04-29
  • Django ORM如何實現或的條件查詢

    在我們使用Django進行資料庫操作的時候,查詢條件往往不止一個,一個好的查詢語句需要考慮我們的查詢要求以及業務場景。在實際工作中,我們經常需要使用或的條件進行查詢,本文將詳細介紹…

    編程 2025-04-29
  • 如何在dolphinscheduler中運行chunjun任務實例

    本文將從多個方面對dolphinscheduler運行chunjun任務實例進行詳細的闡述,包括準備工作、chunjun任務配置、運行結果等方面。 一、準備工作 在運行chunju…

    編程 2025-04-28
  • Django項目中執行Python腳本

    本文將闡述在Django項目中如何執行Python腳本以及執行腳本的幾種方式。 一、subprocess模塊執行Python腳本 subprocess模塊提供了一個簡單的介面用於創…

    編程 2025-04-27
  • dotask——高效易用的任務執行框架

    一、任務執行框架介紹 在一個複雜的系統中,通常存在大量的任務需要執行。這些任務包括但不限於:發送郵件、處理數據、調用服務、生成報表等。在傳統的編程模式中,我們往往需要手動編寫任務調…

    編程 2025-04-25
  • Python Django Channels用法介紹

    本文將從多個方面對Python Django Channels進行詳細的講解,包括介紹、使用、優缺點以及實際應用等,幫助大家更好地理解和應用Python Django Channe…

    編程 2025-04-25
  • Django教程:從入門到實戰

    Django是一個高級的Python Web框架,採用了MTV的設計模式。MTV表示Model-Template-View,是Django框架中的三個核心部分。 一、Django入…

    編程 2025-04-24
  • 啟動Django

    一、安裝Django 在啟動Django之前,我們需要首先安裝Django。Django的最新版本可以在官網上找到。 pip install Django 安裝完畢之後,我們就可以…

    編程 2025-04-24
  • 深入淺出runafter——非同步任務調度器的實現

    一、runafter是什麼? runafter是一個基於JavaScript實現的非同步任務調度器,可以幫助開發人員高效地管理非同步任務。利用runafter,開發人員可以輕鬆地定義和…

    編程 2025-04-23

發表回復

登錄後才能評論