Windows系統下【Celery任務隊列】python使用celery 詳解(一)

在這里插入圖片描述

Celery 是一個基于 Python 的分布式任務隊列框架,它允許你在不同的進程甚至不同的服務器上異步執行任務。

在這里插入圖片描述
特點

  • 簡單:易于使用和配置,提供了簡潔的 API。
  • 高可用:支持任務的可靠交付,即使在出現故障時也能保證任務不丟失。
  • 分布式:可以在多個節點上分布式執行任務,提高系統的處理能力和可擴展性。
  • 多語言支持:雖然主要用 Python 編寫,但也支持其他語言與它進行交互。

架構

  • 任務隊列:存儲等待處理的任務,通常使用消息中間件(如 RabbitMQRedis 等)來實現。
  • 工作者(Worker):負責從任務隊列中獲取任務并執行。
  • 應用(App):定義任務和配置 Celery 的相關設置。

1.安裝配置

安裝 Celerypip install celery
配置消息中間件:如果使用 Redis 作為消息中間件,則需要在Celery 配置中指定 Redis 作為后端和消息代理。
定義任務:在 Python 代碼中定義需要異步執行的任務函數,使用@app.task裝飾器將函數標記為 Celery 任務。
新建 celery_tasks.py 文件, 定義了兩個任務


import time
from celery import Celery# 創建Celery應用
app = Celery('celery_app',broker='redis://localhost:6379/0',backend='redis://localhost:6379/0',broker_transport_options={'global_keyprefix': 'celery_tasks:'},result_backend_transport_options={'global_keyprefix': 'celery_tasks:'})# 定義發送消息任務
@app.task
def send_msg(message):print(f"開始發送消息: {message}")time.sleep(3)print(f"發送消息完成: {message}")return message# 定義發送郵箱任務
@app.task
def send_email(email):print(f"開始發送郵箱: {email}")time.sleep(3)print(f"發送郵箱完成: {email}")return email
  • 'celery_app':這是應用的名稱
  • broker:指的是消息代理,其作用是在任務生產者(調用任務的代碼)和任務消費者(Celery 工作進程)之間傳遞任務消息。
  • backend:是結果后端,用來存儲任務的執行結果。當任務執行完成后,結果會被存儲到結果后端中,之后可以通過任務的 ID 來獲取這些結果

2.啟動工作者

啟動工作者:在命令行中啟動 Celery 工作者,監聽任務隊列并執行任務。

celery -A celery_tasks worker --loglevel=info -P eventlet
  • -A celery_tasks : -A 參數指定了包含 Celery 應用實例的模塊名。
    Celery 會去加載 celery_tasks.py 文件中的 app 實例,并啟動一個工作進程來監聽消息隊列。當有新的 send_email 任務或者send_email任務被發送到消息隊列時,工作進程就會執行該任務。
  • worker: 表示你想要啟動一個 worker 進程來執行任務隊列中的任務。
  • --loglevel=info: 設置日志級別為 info
  • -P eventlet: 指定使用 eventlet 作為并發池的實現。默認情況下,Celery 使用的是 prefork(多進程)模型,但在某些環境下,比如 Windows 上,或者當你需要更高效的 I/O 操作時,可以使用 eventlet 或 gevent 這樣的協程庫來代替。Eventlet 提供了基于 green thread 的并發模型,對于 I/O 密集型的任務來說可能更加高效,并且解決了在 Windows 上由于缺少 fork 支持而可能出現的問題。安裝:pip install eventlet

在這里插入圖片描述

啟動之后redis數據庫會生成這幾個
在這里插入圖片描述

3.調用任務

調用任務:在其他地方的代碼中,可以通過調用任務函數的delayapply_async方法來將任務發送到消息隊列中。

from celery_tasks import send_msg, send_emailresult_msg = send_msg.delay('Hello, World!')
result_email = send_email.delay('123456@qq.com')print(f"Message task ID: {result_msg.id}")
print(f"Email task ID: {result_email.id}")

在這里插入圖片描述

Message task ID: ab6ecfcc-ee26-4265-8097-5087786e4659
Email task ID: 1cf3f8f8-4e1a-4d8c-88a5-f2a32356f763

運行完成,獲取到了ID
在這里插入圖片描述

可以看到Celery worker 是能夠并行處理這兩個任務的
在這里插入圖片描述

在這里插入圖片描述

于此同時,redis數據庫多了兩個,我們就可以根據ID取獲取數據

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

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

相關文章

移動設備常用電子屏幕類型對比

概述 LCD 家族 (TN、STN、TFT、IPS、VA)依賴背光,性能差異主要來自液晶排列和驅動方式。OLED 以自發光為核心優勢,但成本與壽命限制其普及。E-Paper 專為低功耗靜態顯示設計,與傳統屏幕技術差異顯著。 參數LCD&#…

Vue3.5 企業級管理系統實戰(十八):用戶管理

本篇主要探討用戶管理功能,接口部分依然是使用 Apifox mock 模擬。 1 用戶 api 在 src/api/user.ts 中添加用戶相關 CRUD 接口,代碼如下: //src/api/user.ts import request from "/api/config/request"; // 從 "./type&q…

【C】初階數據結構14 -- 歸并排序

本篇文章主要是講解經典的排序算法 -- 歸并排序 目錄 1 遞歸版本的歸并排序 1) 算法思想 2) 代碼 3) 時間復雜度與空間復雜度分析 (1) 時間復雜度 (2) 空間復雜度 2 迭代版本的歸并…

【相機標定】OpenCV 相機標定中的重投影誤差與角點三維坐標計算詳解

摘要: 本文將從以下幾個方面展開,結合典型代碼深入解析 OpenCV 中的相機標定過程,重點闡述重投影誤差的計算方法與實際意義,并通過一個 calcBoardCornerPositions() 函數詳細講解棋盤格角點三維坐標的構建邏輯。 在計算機視覺領域…

RabbitMQ-運維

文章目錄 前言運維-集群介紹多機多節點單機多節點 多機多節點下載配置hosts?件配置Erlang Cookie啟動節點構建集群查看集群狀態 單機多節點安裝啟動兩個節點再啟動兩個節點驗證RabbitMQ啟動成功搭建集群把rabbit2, rabbit3添加到集群 宕機演示仲裁隊列介紹raft算法協議 raft基…

JVM之內存管理(一)

部分內容來源:JavaGuide二哥Java 圖解JVM內存結構 內存管理快速復習 棧幀:局部變量表,動態鏈接(符號引用轉為真實引用),操作數棧(存儲中間結算結果),方法返回地址 運行時…

無線射頻模塊如何通過CE RED認證?關鍵規范與準備策略詳解

隨著無線通信設備在歐洲市場的廣泛應用,CE RED認證已成為模塊類產品進入歐盟的強制通行證。作為專注于LoRa模塊、對講模塊與FSK射頻模塊研發的技術企業,我們深知從設計、測試到量產,每一個環節都需緊扣合規底線。本文將圍繞CE RED認證核心要求…

Golang中集合相關的庫

一切編程語言的底層結構都是數組,其它復雜數據結構如Map, Stack,Heap和Queue都是基于數組建立起來的。 Go語言主流工具庫推薦(含常用數據結構實現) 以下是目前Go生態中最主流且活躍的工具庫,包含隊列、棧、優先級隊列…

ABAP 導入Excel形成內表

文章目錄 創建導入模板程序實現代碼代碼解析運行結果 創建導入模板 程序實現 代碼 *&---------------------------------------------------------------------* *& Report Z_EXCEL_UPLOAD_LHY *&--------------------------------------------------------------…

特殊配合力(SCA)作為全基因組關聯分析(GWAS)的表型,其生物學意義和應用價值

生物學意義 解析非加性遺傳效應 特殊配合力(SCA)主要反映特定親本組合的雜交優勢,由非加性遺傳效應(如顯性、超顯性、上位性)驅動。顯性效應涉及等位基因間的顯性互作,上位性效應則涉及不同位點間的基因互作。通過SCA-GWAS,可以定位調控這些非加性效應的關鍵基因組區域…

應急響應基礎模擬靶機-security1

PS:杰克創建在流量包(result.pcap)在根目錄下,請根據已有信息進行分析 1、攻擊者使用的端口掃描工具是? 2、通過流量及日志審計,攻擊者上傳shell的時訪問web使用IP地址是多少? 3、審計流量日志,攻擊者反彈shell的地址及端口? 4、攻擊者…

uniapp-商城-47-后臺 分類數據的生成(通過數據)

在第46章節中,我們為后臺數據創建了分類的數據表結構schema,使得可以通過后臺添加數據并保存,同時使用云函數進行數據庫數據的讀取。文章詳細介紹了如何通過前端代碼實現分類管理功能,包括獲取數據、添加、更新和刪除分類。主要代…

ClickHouse的基本操作說明

說明 文章內容包括數據庫管理、表操作及查詢等核心功能 創建數據庫 -- 默認引擎(Atomic) CREATE DATABASE IF NOT EXISTS test_db; -- MySQL引擎(映射外部MySQL數據庫) CREATE DATABASE mysql_db ENGINE MySQL(host:port, m…

Nacos源碼—7.Nacos升級gRPC分析四

大綱 5.服務變動時如何通知訂閱的客戶端 6.微服務實例信息如何同步集群節點 6.微服務實例信息如何同步集群節點 (1)服務端處理服務注冊時會發布一個ClientChangedEvent事件 (2)ClientChangedEvent事件的處理源碼 (3)集群節點處理數據同步請求的源碼 (1)服務端處理服務注冊…

《Overlapping Experiment Infrastructure: More, Better, Faster》論文閱讀筆記

文章目錄 1 背景2 三個核心概念3 Launch層:特性發布的專用機制4 流量分發策略和條件篩選4.1 四種流量分發類型4.2 條件篩選機制 5 工具鏈與監控體系6 實驗設計原則7 培訓參考與推薦 1 背景 谷歌(Google)以數據驅動著稱,幾乎所有可…

國芯思辰| 醫療AED可使用2通道24位模擬前端SC2946(ADS1292)

生物電信號監測技術在醫療健康行業中發展迅速,成為評估人體生理健康狀況的關鍵手段。心電(ECG)、腦電(EEG)和肌電(EMG)等信號,通過精密模擬前端芯片捕捉和處理,對醫療診斷…

數據結構【二叉搜索樹(BST)】

二叉搜索樹 1. 二叉搜索樹的概念2. 二叉搜索樹的性能分析3.二叉搜索樹的插入4. 二叉搜索樹的查找5. 二叉搜索樹的刪除6.二叉搜索樹的實現代碼7. 二叉搜索樹key和key/value使用場景7.1 key搜索場景:7.2 key/value搜索場景: 1. 二叉搜索樹的概念 二叉搜索…

RDMA高性能網絡通信實踐

RDMA高性能網絡通信實踐 一、背景介紹二、方法設計A.實現方案B.關鍵技術點 三、代碼及注釋四、注意事項 一、背景介紹 遠程直接內存訪問(RDMA)技術通過繞過操作系統內核和CPU直接訪問遠程內存,實現了超低延遲、高吞吐量的網絡通信。該技術廣…

ndarray數組掩碼操作,True和False獲取數據

#數組掩碼的表示方法 def testht05():a np.arange(1,10)mask [True,False,True,True,False,True,False,True,True]print(a[mask]) 另外的用法: #掩碼操作獲取子集 def testht06():a np.arange(1,100)print(a[a%3 0 & (a%7 0)] )b np.array([A,"B&qu…

索引工具explain

EXPLAIN 是 MySQL 中一個非常有用的工具,用于分析查詢的執行計劃。通過 EXPLAIN,你可以了解 MySQL 是如何執行查詢的,包括它如何使用索引、表的掃描方式等。這有助于優化查詢性能。以下是 EXPLAIN 輸出的各個字段的詳細解釋: 基本用法 EXPLAIN SELECT * FROM table_name …