搜尋
首頁後端開發Python教學學習Python Celery,輕鬆完成非同步任務

雖然現代的網路應用程式比以往任何時候都更快速、更便捷,但仍有許多情況下,需要把繁重的任務轉移到系統的其他部分執行,而不是在主執行緒上進行工作。

這些情況中的範例如下:

  • 週期性任務 —— 規劃在特定時間間隔內執行的工作。例如,每日、每月的報告產生。
  • 第三方工具 —— 應用程式應該快速向使用者回傳回應,而不是等待其他任務先完成。例如,發送電子郵件、通知,將更新進度傳遞給內部工具。
  • 長時間運行的工作 —— 執行複雜或資源昂貴的工作,使用者需要等待工作完成。例如。 DAG工作流程、基於Map-Reduce的任務、長時間運行的Spark作業等。

那麼,如何處理這些情況呢?這時,Celery就派上用場了。

什麼是Celery?

Celery是一個開源的任務佇列實現,通常與基於Python的網路框架(如Flask和Django)相結合,在典型的請求-回應週期之外非同步執行任務。

因此,Celery本質上是一個基於分散式訊息傳遞的任務佇列。執行單元或任務在一個或多個worker上使用多處理、gevent或Eventlet同時執行。這些任務可以同步執行(即等到準備就緒)或非同步執行(即在背景)。

轻松完成异步任务,一文搞懂Python Celery

Celery是如何運作的?

Celery是一個分散式任務隊列,基於生產者-消費者模式。

任務佇列是用於跨執行緒和機器分配工作的機制,本質上是生產者(網路應用程式)和消費者(Celery工作者)之間的訊息中介。

Celery透過訊息進行交互,代理商(broker)在客戶(生產者)和工作者(消費者)之間充當中間人。為了啟動任務,客戶端將訊息推送到佇列中,然後代理將該訊息傳遞給工作者。

Celery系統可以由多個worker和broker組成,這為高可用性和橫向擴展提供了可能。

簡而言之,Celery客戶端是生產者,它透過訊息代理程式為佇列中新增新的任務。然後,Celery工作者同樣透過訊息代理從佇列中取得新的任務。一旦處理完畢,結果就會儲存在結果後端。

工作實例

下面的範例將使用RedisMQ作為訊息代理。

設定Redis

在linux/macOS系統上,透過下列指令在本機上執行Redis伺服器:

$ wget http://download.redis.io/redis-stable.tar.gz
$ tar xvzf redis-stable.tar.gz
$ rm redis-stable.tar.gz
$ cd redis-stable
$ make

設定好Redis後,執行下列指令執行Redis伺服器:

$ redis-server

該伺服器在預設的6379連接埠運行。

設定應用程式

首先,在本地設定Python專案。

Celery可以透過標準工具如pip或easy_install來安裝。透過以下命令安裝Celery和Redis:

pip install celery redis==4.3.4

現在需要一個Celery實例來運行應用程序,Celery實現任何任務都是以實例開始,例如創建和管理任務等。

在專案中建立一個檔案tasks.py:

From celery import Celery

broker_url = 'redi://localhost:6379/0'

app = Celery('tasks',broker = broker_url)

@app.task
def add(x, y):
return x+y

這裡定義了一個簡單的任務add(),傳回兩個數字的總和。

運行Celery Worker

在終端機上,切換到專案位置並用以下命令運行Celery worker:

$ celery -A tasks worker - loglevel=info

關於Celery worker命令行的詳細信息,可以使用help:

$ celery worker - help

呼叫任務

在Celery中,使用delay()方法來呼叫任務。

開啟專案的另一個終端機視窗並執行以下命令:

$ python

這將開啟Python命令列。

>> from tasks import add
>> add.delay(1,2)

這將傳回一個AsyncResult實例,可以用來檢查任務狀態,獲得其傳回值,等待任務完成,也可以在失敗時獲得異常和回溯。

執行add.delay()指令後,任務會被推送到佇列中,然後被worker取得。這可以在Celery worker終端機上進行驗證,可以清楚地看到任務被接收,之後任務成功完成。

以上是學習Python Celery,輕鬆完成非同步任務的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:51CTO.COM。如有侵權,請聯絡admin@php.cn刪除
可以在Python數組中存儲哪些數據類型?可以在Python數組中存儲哪些數據類型?Apr 27, 2025 am 12:11 AM

pythonlistscanStoryDatatepe,ArrayModulearRaysStoreOneType,and numpyArraySareSareAraysareSareAraysareSareComputations.1)列出sareversArversAtileButlessMemory-Felide.2)arraymoduleareareMogeMogeNareSaremogeNormogeNoreSoustAta.3)

如果您嘗試將錯誤的數據類型的值存儲在Python數組中,該怎麼辦?如果您嘗試將錯誤的數據類型的值存儲在Python數組中,該怎麼辦?Apr 27, 2025 am 12:10 AM

WhenyouattempttostoreavalueofthewrongdatatypeinaPythonarray,you'llencounteraTypeError.Thisisduetothearraymodule'sstricttypeenforcement,whichrequiresallelementstobeofthesametypeasspecifiedbythetypecode.Forperformancereasons,arraysaremoreefficientthanl

Python標準庫的哪一部分是:列表或數組?Python標準庫的哪一部分是:列表或數組?Apr 27, 2025 am 12:03 AM

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

您應該檢查腳本是否使用錯誤的Python版本執行?您應該檢查腳本是否使用錯誤的Python版本執行?Apr 27, 2025 am 12:01 AM

ThescriptisrunningwiththewrongPythonversionduetoincorrectdefaultinterpretersettings.Tofixthis:1)CheckthedefaultPythonversionusingpython--versionorpython3--version.2)Usevirtualenvironmentsbycreatingonewithpython3.9-mvenvmyenv,activatingit,andverifying

在Python陣列上可以執行哪些常見操作?在Python陣列上可以執行哪些常見操作?Apr 26, 2025 am 12:22 AM

Pythonarrayssupportvariousoperations:1)Slicingextractssubsets,2)Appending/Extendingaddselements,3)Insertingplaceselementsatspecificpositions,4)Removingdeleteselements,5)Sorting/Reversingchangesorder,and6)Listcomprehensionscreatenewlistsbasedonexistin

在哪些類型的應用程序中,Numpy數組常用?在哪些類型的應用程序中,Numpy數組常用?Apr 26, 2025 am 12:13 AM

NumPyarraysareessentialforapplicationsrequiringefficientnumericalcomputationsanddatamanipulation.Theyarecrucialindatascience,machinelearning,physics,engineering,andfinanceduetotheirabilitytohandlelarge-scaledataefficiently.Forexample,infinancialanaly

您什麼時候選擇在Python中的列表上使用數組?您什麼時候選擇在Python中的列表上使用數組?Apr 26, 2025 am 12:12 AM

useanArray.ArarayoveralistinpythonwhendeAlingwithHomoGeneData,performance-Caliticalcode,orinterfacingwithccode.1)同質性data:arraysSaveMemorywithTypedElements.2)績效code-performance-calitialcode-calliginal-clitical-clitical-calligation-Critical-Code:Arraysofferferbetterperbetterperperformanceformanceformancefornallancefornalumericalical.3)

所有列表操作是否由數組支持,反之亦然?為什麼或為什麼不呢?所有列表操作是否由數組支持,反之亦然?為什麼或為什麼不呢?Apr 26, 2025 am 12:05 AM

不,notalllistoperationsareSupportedByArrays,andviceversa.1)arraysdonotsupportdynamicoperationslikeappendorinsertwithoutresizing,wheremactsperformance.2)listssdonotguaranteeconecontanttanttanttanttanttanttanttanttanttimecomplecomecomplecomecomecomecomecomecomplecomectacccesslectaccesslecrectaccesslerikearraysodo。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用