Django的異步任務隊列管理_Celery

1 基本原理

Celery 是一個異步任務隊列,能夠將耗時操作(如發郵件、處理圖片、網絡爬蟲等)從 Django 主線程中分離出來,由后臺的 worker 處理,避免阻塞請求。Celery 作為獨立運行的后臺進程(Worker),持續監聽消息隊列(Broker),接收并處理任務,而 Django 主線程用于發布任務。

Celery 是一種獨立于 Django 的程序,通常需手動啟動。它通過 Redis 等工具與主線程進行通信,并將任務進度和結果寫入數據庫,方便后續追溯。

基本流如下:

1.1 消息中間件 Broker

Django 和 Celery 通過消息中間件(Broker)進行通信,最常用的選擇是 Redis 或 RabbitMQ,因為它們速度快且穩定。如果可以接受安裝 Redis(在本地啟動只需一條命令),建議直接使用它。當然,還可以考慮其他替代方案。

以批處理為例,時序圖如下:

2 memory 方式實現

為了簡化步驟,我先測試了 memory 方法。

2.1 安裝 Celery

$ pip install celery

2.2 加入項目

  • 創建?myproject/my_celery.py?文件,內容如下:
import os
from celery import Celeryos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')app = Celery('myproject') # 注意改成自己的 myproject 名app.conf.broker_url = 'memory://'
app.conf.result_backend = 'cache+memory://'app.autodiscover_tasks()
  • 在?myproject/__init__.py?里加入:
from .my_celery import app as celery_app  __all__ = ['celery_app']`

2.3 異步功能函數

添加異步功能:在應用的?tasks.py?中定義任務:

from celery import shared_task@shared_task
def add(x, y):print(f"Adding {x} + {y}")return x + y

調用異步功能:

from myapp.tasks import addadd.delay(2, 3)

注意:由于 memory 維護不佳,建議直接使用 Redis。

3 redis 方式實現

3.1 使用 docker 方式安裝 redis

docker run -d --name redis-dev -p 6379:6379 redis

3.2 安裝 redis 包

pip install redis

3.3 修改代碼

替換設置部分:

app.conf.update(broker_url='redis://localhost:6379/0', # 如果在docker中使用,需要轉換成宿主機ipresult_backend='redis://localhost:6379/1',task_serializer='json',accept_content=['json'],timezone='Asia/Shanghai',enable_utc=True,
)

3.4 啟動 celery

一般情況下,需要手動啟動 celery 進程

celery -A your_project worker --loglevel=info

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

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

相關文章

【計算機網絡】Linux網絡的幾個常用命令

📚 博主的專欄 🐧 Linux | 🖥? C | 📊 數據結構 | 💡C 算法 | 🅒 C 語言 | 🌐 計算機網絡 相關文章:計算機網絡專欄 目錄 ping(檢測網絡連通性)…

全開源、私有化部署!輕量級用戶行為分析系統-ClkLog

ClkLog是一款支持私有化部署的全開源埋點數據采集與分析系統,兼容Web、App、小程序多端埋點,快速洞察用戶訪問路徑、行為軌跡,并生成多維用戶畫像。助力中小團隊搭建輕量靈活的用戶行為分析平臺。 為什么需要一款私有化的埋點分析系統&#x…

golang定時器的精度

以 go1.23.3 linux/amd64 為例。 定時器示例代碼: package mainimport ("context""fmt""time" )var ctx context.Contextfunc main() {timeout : 600 * time.Secondctx, _ context.WithTimeout(context.Background(), timeout)dea…

svn 遠程服務搜索功能

svn服務器沒有遠程搜索功能,靠人工檢索耗時耗力,當服務器文件過多時,全部checkout到本地檢索,耗時太久。 1. TortoiseSVN 安裝注意事項 下載官網地址:https://tortoisesvn.en.softonic.com/download 安裝時選中 co…

uniapp-商城-39-shop 購物車 選好了 進行訂單確認4 配送方式2 地址頁面

上面講基本的樣式和地址信息,但是如果沒有地址就需要添加地址,如果有不同的地址就要選地址。 來看看處理方式, 1、回顧 在delivery-layout中 methods:{goAddress(){uni.navigateTo({url:"/pagesub/pageshop/address/addrlist"})…

Linux命令-iostat

iostat 命令介紹 iostat 是一個用于監控 Linux 系統輸入/輸出設備加載情況的工具。它可以顯示 CPU 的使用情況以及設備和分區的輸入/輸出統計信息,對于診斷系統性能瓶頸(如磁盤或網絡活動緩慢)特別有用。 語法: iostat [options…

vue2關于Node.js17及以上報digital envelope錯誤的解決辦法

文章目錄 簡介錯誤原因解決方案設置環境變量修改package.json安裝舊版本Node.js更新依賴項更改加密設置 簡介 digital envelope routines::unsupported錯誤?通常發生在Node.js版本升級到17或更高版本后,因為這些版本開始使用OpenSSL 3.0,它對算法和密鑰…

LLM - Large Language Model

回顧2024:與LLM又相伴一年的經歷與思考 - 知乎萬字長文入門大語言模型(LLM) - 知乎“大模型本質就是兩個文件!”特斯拉前AI總監爆火LLM科普,時長1小時,面向普通大眾 - 知乎大模型本質及趨勢剖析&#xff0c…

Linux 內核網絡協議棧中的關鍵數據結構:inet_skb_parm 與 ip_options

在 Linux 內核的網絡協議棧中,數據包的高效處理依賴于一系列精心設計的數據結構。這些結構體不僅需要存儲網絡數據的元信息,還需支持復雜的協議邏輯(如路由、分片、安全策略等)。本文聚焦兩個核心結構體 struct inet_skb_parm 和 struct ip_options,解析它們的設計原理、功…

如何修復卡在恢復模式下的 iPhone:簡短指南

Apple 建議使用恢復模式作為最后的手段,以便在 iPhone 啟動循環或顯示 Apple 標志時恢復 iPhone。這是解決持續問題的簡單方法,但您很少使用。但是,當您的 iPhone 卡住恢復模式本身時,您會怎么做?雖然 iPhone 卡在這種…

10前端項目----商品詳情頁/滾輪行為

商品詳情頁面 商品詳情組件發送請求獲取相應商品詳情信息組件展示數據 優化一下路由配置代碼滾輪自動置頂 商品詳情組件 路由配置 點擊商品進行跳轉—將Detail組件變成路由組件 從商品到詳情,肯定需要傳參(產品ID)告訴Detail是哪個商品,需要展示哪個商品…

DIFY 又跟新了,來到 1.3.0 版本,看正文

歡迎來到 1.3.0 版本!添加了各種巧妙的功能、修復了錯誤,并帶來了一些新功能: 一、核心亮點: 結構化輸出 1、LLM 節點新增JSON Schema編輯器,確保大語言模型能夠返回符合預設格式的JSON數據。這一功能有助于提升數據…

git檢查提交分支和package.json的version版本是否一致

這里寫自定義目錄標題 一、核心實現步驟?1.安裝必要依賴?2.初始化 Husky?3.創建校驗腳本?4.配置 lint-staged?5.更新 Husky 鉤子? 三、工作流程說明?四、注意事項? 以下是基于 Git Hooks 的完整解決方案,通過 husky 和自定義腳本實現分支名與版本號一致性校…

react-navigation-draw抽屜導航

心得寫在前面分享給大家: 我的實現方法,并沒有完全安裝官網來做,而是進行了簡化,效果是一樣的。沒有按照官網說的修改metro.config.js文件,同時也沒有 react-native-gesture-handler 的安裝后,我們需要有條…

【計算機視覺】CV實戰項目-高分辨率遙感圖像語義分割:High-Resolution-Remote-Sensing-Semantic-Segmentation

高分辨率遙感圖像語義分割技術解析與實戰指南 項目背景與意義核心技術解析1. **膨脹預測(Dilated Prediction)**2. **后處理優化**3. **半監督學習:偽標簽(Pseudo Labeling)**4. **可視化與監控** 實戰指南&#xff1a…

免費送源碼:Java+SSM+MySQL 基于SSM開發的校園心理咨詢平臺系統的設計與實現 計算機畢業設計原創定制

目 錄 1 緒論 1 1.1 研究背景 1 1.2開發現狀 1 1.3論文結構與章節安排 2 2 校園心理咨詢平臺系統系統分析 3 2.1 可行性分析 3 2.1.1 技術可行性分析 3 2.1.2 經濟可行性分析 3 2.1.3 法律可行性分析 3 2.2 系統功能分析 3 2.2.1 功能性分析 4 2.2.2 非功能性分析…

學習筆記:Qlib 量化投資平臺框架 — GETTING STARTED

學習筆記:Qlib 量化投資平臺框架 — GETTING STARTED Qlib 是微軟亞洲研究院開源的一個面向人工智能的量化投資平臺,旨在實現人工智能技術在量化投資中的潛力,賦能研究,并創造價值,從探索想法到實施生產。Qlib 支持多種…

cmake qt 項目編譯

當前MAC 編譯命令 rm -rf build 刪除之前build記錄 mkdir build && cd build 重新生成build文件夾 cmake -DCMAKE_PREFIX_PATH"/usr/local/opt/qt" .. Cmake編譯指定我的qt路徑 cmake --build . 生成程序 程序生成后如此 第三方庫單獨下載 在CMakeLis…

Swift與iOS內存管理機制深度剖析

前言 內存管理是每一位 iOS 開發者都繞不開的話題。雖然 Swift 的 ARC(自動引用計數)極大簡化了開發者的工作,但只有深入理解其底層實現,才能寫出高效、健壯的代碼,避免各種隱蔽的內存問題。本文將從底層原理出發&…

【機器學習】?碳化硅器件剩余使用壽命稀疏數據深度學習預測

2025 年,哈爾濱工業大學的 Le Gao 等人基于物理信息深度學習(PIDL)方法,研究了在稀疏數據條件下碳化硅(SiC)MOSFET 的剩余使用壽命(RUL)預測問題,尤其關注了其在輻射環境下的可靠性。該研究團隊通過一系列實驗,采用 ??Co γ 射線作為輻射源,以 50rad/s 的劑量率照…