Django+celery+flower

Django+celery+flower

  • Django的定時任務及可視化監控
    • Django

Django的定時任務及可視化監控

Django的定時任務,以及可視化監控。

Django

  1. Django;
    首先在python中新建虛擬環境并激活
pip install virtualenv
python -m venv venv
source venv/bin/activate
pip install django #安裝django
安裝
  1. 創建django項目;
django-admin startproject myproject
cd myproject

啟動Django開發服務器:

python manage.py runserver

默認情況下,服務器會運行在 http://127.0.0.1:8000/。

完成后,可以停用虛擬環境:

deactivate
  1. redis;
    這里使用源碼安裝,參考redis官網
    新開一個窗口,不在python虛擬環境操作
wget https://download.redis.io/redis-stable.tar.gz
tar -xzvf redis-stable.tar.gz
cd redis-stable
make
sudo yum install openssl-devel
make BUILD_TLS=yes
sudo make install
cp redis.conf  /etc/
redis-server /etc/redis.conf

檢查redis是否啟動

redis-cli
127.0.0.1:6379> ping
PONG  #成功
  1. celery簡單示例;
    安裝
pip install  celery django-celery-beat 

新建一個應用

python manage.py startapp myapp

將 myapp 和 django_celery_beat 添加到 INSTALLED_APPS 中,編輯 myproject/settings.py 文件:

INSTALLED_APPS = [...'django_celery_beat','myapp',
]

在 myproject 文件夾下創建一個名為 celery.py 的文件,并添加以下內容:

import os
from celery import Celeryos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
app = Celery('myproject')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

在 myproject/init.py 文件中添加以下內容:

from .celery import app as celery_app__all__ = ('celery_app',)

在 myproject/settings.py 文件中添加 Celery 配置:

CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
CELERY_TIMEZONE = "Asia/Shanghai"
CELERY_ENABLE_UTC = False

在 myapp 文件夾下創建一個名為 tasks.py 的文件,并定義一個簡單的定時任務:

from celery import shared_task
import datetime@shared_task
def print_time():now = datetime.datetime.now()print(f"Current time: {now}")

在 myproject/celery.py 文件中定義定時任務的調度計劃:

from celery.schedules import crontabapp.conf.beat_schedule = {'print-time-every-minute': {'task': 'myapp.tasks.print_time','schedule': crontab(minute='*'),},
}

這里定義了一個名為 print-time-every-minute 的定時任務,它會每分鐘執行一次 myapp.tasks.print_time 任務。
啟動 Celery worker:

celery -A myproject worker -l info

啟動 Celery beat:

celery -A myproject beat -l info

啟動 Django 開發服務器:

python manage.py runserver

查看結果
在終端中可以看到 Celery beat 每分鐘調度一次 print_time 任務,并在 Celery worker 的終端中打印當前時間。

  1. 定時任務時間寫法;
    在 Celery 中,定時任務的定時時間可以通過多種方式指定,主要包括以下幾種常見的寫法
    1)使用 crontab,例如每分鐘、每小時、每天、每周等
from celery.schedules import crontabapp.conf.beat_schedule = {'print-time-every-minute': {'task': 'myapp.tasks.print_time','schedule': crontab(minute='*'),  # 每分鐘執行一次},'print-time-every-hour': {'task': 'myapp.tasks.print_time','schedule': crontab(minute=0, hour='*'),  # 每小時的第0分鐘執行一次},'print-time-every-day': {'task': 'myapp.tasks.print_time','schedule': crontab(minute=0, hour=0),  # 每天的凌晨0點執行一次},'print-time-every-week': {'task': 'myapp.tasks.print_time','schedule': crontab(minute=0, hour=0, day_of_week=1),  # 每周一凌晨0點執行一次},
}

參數說明:
minute:分鐘,范圍是 0-59。
hour:小時,范圍是 0-23。
day_of_week:星期幾,范圍是 0-6,其中 0 表示星期天。
2)使用 timedelta,指定任務的執行間隔,例如每幾秒、幾分鐘、幾小時等。

from datetime import timedeltaapp.conf.beat_schedule = {'print-time-every-10-seconds': {'task': 'myapp.tasks.print_time','schedule': timedelta(seconds=10),  # 每10秒執行一次},'print-time-every-15-minutes': {'task': 'myapp.tasks.print_time','schedule': timedelta(minutes=15),  # 每15分鐘執行一次},'print-time-every-2-hours': {'task': 'myapp.tasks.print_time','schedule': timedelta(hours=2),  # 每2小時執行一次},
}

3)timedelta 的固定時間間隔,需要任務在固定的時間間隔內執行,可以使用 timedelta 的組合

from datetime import timedeltaapp.conf.beat_schedule = {'print-time-every-1-hour-30-minutes': {'task': 'myapp.tasks.print_time','schedule': timedelta(hours=1, minutes=30),  # 每1小時30分鐘執行一次},'print-time-every-2-days-12-hours': {'task': 'myapp.tasks.print_time','schedule': timedelta(days=2, hours=12),  # 每2天12小時執行一次},
}

4)crontab 的高級組合,支持更復雜的組合,例如指定特定的分鐘、小時、星期幾等

from celery.schedules import crontabapp.conf.beat_schedule = {'print-time-specific-time': {'task': 'myapp.tasks.print_time','schedule': crontab(minute=30, hour=14, day_of_week='mon,tue,wed'),  # 每周一、二、三的下午2點30分執行一次},'print-time-specific-dates': {'task': 'myapp.tasks.print_time','schedule': crontab(minute=0, hour=0, day_of_month='1,15'),  # 每月的1號和15號凌晨0點執行一次},
}

參數說明:
minute:可以指定具體的分鐘,例如 30 或 0,15,30,45。
hour:可以指定具體的小時,例如 14 或 0-23。
day_of_week:可以指定具體的星期幾,例如 mon,tue,wed 或 1-5。
day_of_month:可以指定具體的日期,例如 1,15。
5)crontab 的通配符指定更靈活的時間。

from celery.schedules import crontabapp.conf.beat_schedule = {'print-time-every-other-minute': {'task': 'myapp.tasks.print_time','schedule': crontab(minute='*/2'),  # 每隔2分鐘執行一次},'print-time-every-other-hour': {'task': 'myapp.tasks.print_time','schedule': crontab(minute=0, hour='*/2'),  # 每隔2小時執行一次},'print-time-every-weekday': {'task': 'myapp.tasks.print_time','schedule': crontab(minute=0, hour=0, day_of_week='1-5'),  # 每個工作日的凌晨0點執行一次},
}

參數說明:
minute=‘/2’:每隔2分鐘執行一次。
hour='
/2’:每隔2小時執行一次。
day_of_week=‘1-5’:表示星期一到星期五。
6)timedelta 的動態間隔,動態調整任務的執行間隔,可以在任務中動態修改 beat_schedule

from datetime import timedelta
from celery import shared_task@shared_task
def dynamic_task():print("Dynamic task executed")# 修改任務的執行間隔app.conf.beat_schedule['dynamic-task']['schedule'] = timedelta(seconds=30)app.conf.beat_schedule = {'dynamic-task': {'task': 'myapp.tasks.dynamic_task','schedule': timedelta(seconds=10),  # 初始間隔為10秒},
}
  1. flower;
    安裝flower
pip install flower

啟動,啟動之前確保celery已經配置好并運行正常

celery -A myproject flower --port=5555 --broker=redis://localhost:6379/0
加密啟動
celery -A myproject flower --port=5555 --broker=redis://localhost:6379/0 --basic_auth=user:password

配置celery,在 Celery 配置中啟用事件發送功能,在 myproject/celery.py 文件中添加以下配置:

app.conf.update(worker_send_task_events=True,  # 啟用任務事件發送task_send_sent_event=True,    # 啟用任務發送事件
)

在瀏覽器中訪問 http://127.0.0.1:5555/,即可看到 Flower 的監控界面

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898465.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898465.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898465.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python 編程題 第十一節:選擇排序、插入排序、刪除字符、目標移動、尾部的0

選擇排序 假定第一個為最小的為已排序序列,與后面的比較,找到未排序序列中最小的后,交換位置,獲得最小元素,依次往后 lst[1,14,25,31,21,13,6,8,14,9,7] def selection_sort(lst):for i in range(len(lst)):min_inde…

組態王Kingview配置為OPCUA服務器的一些問題處理

一、問題描述 1、組態王【運行配置】界面沒有【服務配置】的選項,無法將組態王Kingview配置為OPCUA服務器; 2、點擊組態王【運行配置界面】的【服務配置】選項彈窗警告提示【試圖執行的操作不受支持】,如下圖所示: 二、問題分析 …

模塊二 單元4 安裝AD+DC

模塊二 單元4 安裝ADDC 兩個任務: 1.安裝AD活動目錄 2.升級當前服務器為DC域控制器 安裝前的準備工作: 確定你要操作的服務器系統(Windows server 2022); 之前的服務器系統默認是工作組的模式workgroup模式&#xff08…

git clone項目報錯fatal: fetch-pack: invalid index-pack output問題

前情回顧:git項目放在公司服務器上面,克隆等操作需要連接VPN才能操作。由于項目比較大,網速比較慢,克隆項目經常出現fetch-pack: invalid index-pack output。在網上查找各種解決方法。也就這一種有點效果。僅供參考,不…

前端Tailwind CSS面試題及參考答案

解釋 Tailwind CSS 中 w-1/2 和 max-w-md 的區別及適用場景 在 Tailwind CSS 里,w-1/2 和 max-w-md 屬于不同類型的寬度控制類,它們的功能和適用場景存在明顯差異。 w-1/2 是用來設定元素寬度的類。它把元素寬度設定為其父元素寬度的一半。例如&#xff…

《深度剖析:BERT與GPT——自然語言處理架構的璀璨雙星》

在自然語言處理(NLP)的廣袤星空中,BERT(Bidirectional Encoder Representations from Transformers)與GPT(Generative Pretrained Transformer)系列模型宛如兩顆最為耀眼的星辰,引領…

VMware主機換到高配電腦,高版本系統的問題

原來主機是i3 ,windows7系統,vmware 14.0,虛機系統是ubuntu 14.04。目標新機是i7 14700KF,windows11系統。原以為安裝虛擬機,將磁盤文件,虛擬機配置文件拷貝過去可以直接用。 新目標主機先安裝了vmware 15,運行原理虛機&#xff0…

后端框架模塊化

后端框架的模塊化設計旨在簡化開發流程、提高可維護性,并通過分層解耦降低復雜性。以下是常見的后端模塊及其在不同語言(Node.js、Java、Python)中的實現方式: 目錄 1. 路由(Routing)2. 中間件(…

MDG實現BP客商復雜邏輯校驗的方法

引言 項目中可能常用的增強點是USMD_RULE_SERVICE來實現復雜的校驗邏輯,除此之外,SAP對BP主數據還提供了以下的實現方式。 方法1-替換ERP校驗類 眾所周知,BP存在復雜的ERP校驗,主要通過類CL_MDG_BS_FND_BP_CHECK(子…

基于springboot的教務系統(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 這些年隨著Internet的迅速發展,我們國家和世界都已經進入了互聯網大數據時代,計算機網絡已經成為了整個社會以及經濟發展的巨大動能,各個高校的教務工作成為了學校管理事務的重要目標和任務,因此運用互聯網技術來提高教務的…

TDengine 中的流式計算

簡介 TDengine 中的流計算,功能相當于簡化版的 FLINK , 具有實時計算,計算結果可以輸出到超級表中存儲,同時也可用于窗口預計算,加快查詢速度。 創建流式計算 CREATE STREAM [IF NOT EXISTS] stream_name [stream_o…

代碼隨想錄day23 回溯part2

39.組合總和 給你一個 無重復元素 的整數數組 candidates 和一個目標整數 target ,找出 candidates 中可以使數字和為目標數 target 的 所有 不同組合 ,并以列表形式返回。你可以按 任意順序 返回這些組合。 candidates 中的 同一個 數字可以 無限制重…

回調函數中 qsort 函數的使用

目錄 一.冒泡排序 二.指針類型 void* 三. qsort 1.簡介 2.研究函數參數 3.怎么用? (1)排數組,升序 (2)排序結構體 四.用冒泡排序思想,模擬實現 qsort (可排序任意類型數據) 1.函數參數設計 2.在 if (cmp( )>0) 怎么傳參&#x…

電機控制常見面試問題(十四)

文章目錄 一.電機信噪比二.電機零點偏移校正和極對數自適應1.零點偏移量檢測?2. 極對數識別三.交流電機電流紋波怎么產生的1.電源相關因素2.電機本體特性3.?PWM逆變器諧波4.負載與環境干擾5.診斷流程建議 四.談談對諧波的理解1.諧波定義2.次諧波產生源3.次諧波的檢測與分析4.…

axios和fetch的對比

axios 和 fetch 是用于發起 HTTP 請求的兩種常見工具,它們的主要區別如下: 1. 瀏覽器兼容性 axios:基于 XMLHttpRequest,兼容性較好,支持較舊的瀏覽器(如 IE11)。fetch:現代瀏覽器…

Java Timer定時任務源碼分析

前言 Java 提供的java.util.Timer類可以用來執行延時任務,任務可以只執行一次,也可以周期性的按照固定的速率或延時來執行。 實現一個延時任務調度器,核心有兩點: 如何存儲延時任務如何調度執行延時任務 源碼分析 TimerTask …

【安全運營】用戶與實體行為分析(UEBA)淺析

目錄 用戶與實體行為分析(UEBA)簡介一、UEBA的核心概念1. 行為基線建立2. 異常檢測3. 風險評分4. 上下文關聯 二、UEBA的應用場景1. 內部威脅檢測2. 外部威脅應對3. 合規性和審計支持 三、UEBA的技術實現1. 大數據技術2. 機器學習算法3. 可視化工具 四、…

系統思考—啤酒游戲經營決策沙盤模擬

再次感謝文華學院的邀請,為經緯集團管理層帶來 《啤酒游戲經營決策沙盤》! 很多朋友問:“最近是不是啤酒游戲上的少了?” 其實,真正的關鍵不是游戲本身,而是——如何讓大家真正看見復雜系統中的隱性結構。 …

排序算法實現:插入排序與希爾排序

目錄 一、引言 二、代碼整體結構 三、宏定義與頭文件 四、插入排序函數(Insertsort) 函數作用 代碼要點分析 五、希爾排序函數(ShellSort) 函數作用 代碼要點分析 六、打印數組函數(PrintSort&#x…

redis的key是如何找到對應存儲的數據原理

在 Redis 中,Key 是數據的唯一標識符,而 Value 是與 Key 關聯的實際數據。Redis 通過高效的鍵值對存儲機制,能夠快速定位和訪問數據。以下是 Redis 如何通過 Key 找到對應存儲數據的詳細解析: 1. Redis 的數據存儲結構 Redis 是一個基于內存的鍵值存儲系統,其核心數據結構…