1. 程式人生 > >Python 並行分散式框架:Celery 超詳細介紹

Python 並行分散式框架:Celery 超詳細介紹

先來一張圖,這是在網上最多的一張Celery的圖了,確實描述的非常好

這裡寫圖片描述

Celery的架構由三部分組成,訊息中介軟體(message broker),任務執行單元(worker)和任務執行結果儲存(task result store)組成。

訊息中介軟體

Celery本身不提供訊息服務,但是可以方便的和第三方提供的訊息中介軟體整合。包括,RabbitMQ, Redis, MongoDB (experimental), Amazon SQS (experimental),CouchDB (experimental), SQLAlchemy (experimental),Django ORM (experimental), IronMQ

任務執行單元

Worker是Celery提供的任務執行的單元,worker併發的執行在分散式的系統節點中。

任務結果儲存

Task result store用來儲存Worker執行的任務的結果,Celery支援以不同方式儲存任務的結果,包括AMQP, Redis,memcached, MongoDB,SQLAlchemy, Django ORM,Apache Cassandra, IronCache

OK 廢話就說到這, 來點使用的。

首先你也看到了, 你要有一個訊息中介軟體,此處我們選擇rabbitmq,為什麼不用redis或者sqs呢,首先這兩個我都用過了,想接觸以下rabbitmq,所以果斷選擇這個。

Now 安裝rabbitmq!
官網介紹有安裝方法, 我貼以下網址吧,自己看看,很簡單很簡單。 我是Mac系統 http://www.rabbitmq.com/install-standalone-mac.html 如果是其他系統自己對應下。 可以把sbin的路徑配置到path裡面(我比較懶 沒加,所以去到解壓目錄,囧)

啟動管理外掛:sbin/rabbitmq-plugins enable rabbitmq_management
啟動rabbitmq:sbin/rabbitmq-server -detached

ok, now,rabbitmq已經啟動,可以開啟頁面來看看
地址:http://localhost:15672/#/


使用者名稱密碼都是guest
現在可以進來了把,可以看到具體頁面。
關於rabbitmq的配置,網上很多 自己去搜以下就ok了。

好了 訊息中介軟體有了,現在該來程式碼了,我是在celeby官網看的,如果覺得我程式碼有問題,可以自己去官網看,嘿嘿。

首先,定義一個task。

from celery import Celery

app = Celery('tasks', backend='amqp://[email protected]//', broker='amqp://[email protected]//')

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

儲存為tasks.py
—>broker 就是中介軟體了,自己看著改吧, backend就是 後端來發送狀態訊息,保持追蹤任務的狀態,儲存或傳送這些狀態

Now 可以啟動了
命令: celery -A tasks worker –loglevel=info
想要檢視完整的命令列引數列表
命令:celery worker –help 或者
celery help

現在 另開一個terminal,啟用虛擬環境, ipython 啟動python console

In [9]: from tasks import add

In [10]: result = add.delay(6, 7)

現在你可以在用之前命令啟動的終端中看到輸出,而且可以驗證結果。
呼叫任務會返回一個 AsyncResult 例項,可用於檢查任務的狀態,等待任務完成或獲取返回值, 而且現在我們也設定了一個用於儲存結果和狀態等資訊的backend, 現在你可以成功的拿到結果, 如果你print result, 你會看到一串字串, 類似與uuid。
如下方式:

In [11]: result.ready()
Out[11]: True

In [12]: result.get(timeout=1)
Out[12]: 13

In [13]: result.get(propagate=False)
Out[13]: 13

ok 現在看到結果了吧。
注: propagate的作用 倘若任務丟擲了一個異常, get() 會重新丟擲異常, 但你可以指定 propagate 引數來覆蓋這一行為。

以上就是一些程式碼了。

下面是 celery的配置,配置的話 你不想看這個 可以去官網看,比我的詳細的多。

app.conf.update(
    CELERY_TASK_SERIALIZER='json',
    CELERY_ACCEPT_CONTENT=['json'],  # Ignore other content
    CELERY_RESULT_SERIALIZER='json',
    CELERY_TIMEZONE='Europe/Oslo',
    CELERY_ENABLE_UTC=True,
)

但是對於大型專案來說 這樣配置就顯得很low,這個時候可以用模組。你可以呼叫 config_from_object() 來讓 Celery 例項載入配置模組。
app.config_from_object(‘celeryconfig’)

celeryconfig.py

BROKER_URL = 'amqp://'
CELERY_RESULT_BACKEND = 'amqp://'

CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT=['json']
CELERY_TIMEZONE = 'Europe/Oslo'
CELERY_ENABLE_UTC = True

可以使用 python -m celeryconfig 來驗證配置是否正確。

好了 這是這篇部落格的全部,稍後還有有的,謝謝。

相關推薦

Python 並行分散式框架Celery 詳細介紹

先來一張圖,這是在網上最多的一張Celery的圖了,確實描述的非常好 Celery的架構由三部分組成,訊息中介軟體(message broker),任務執行單元(worker)和任務執行結果儲存(task result store)組成。 訊息中介軟體

Python 並行分散式框架Celery

Celery (芹菜)是基於Python開發的分散式任務佇列。它支援使用任務佇列的方式在分佈的機器/程序/執行緒上執行任務排程。 架構設計 Celery的架構由三部分組成,訊息中介軟體(message broker),任務執行單元(worker)和任務執行結果儲存(tas

並行分散式框架 Celery 的分享理解

Celery 官網:http://www.celeryproject.org/ Celery 官方文件英文版:http://docs.celeryproject.org/en/latest/index.html Celery 官方文件中文版:http://docs.jinkan.or

上線 Python 應用僅需一條命令的開源框架Zappa(詳細教程)

> 本文面向有 Python Web 基礎的小夥伴 ![](https://img2020.cnblogs.com/blog/759200/202103/759200-20210307162458929-100637304.jpg) 作者:HelloGitHub-吱吱 這裡是 **HelloG

[原始碼解析] 並行分散式框架 Celery 之架構 (2)

# [原始碼解析] 並行分散式框架 Celery 之架構 (2) [toc] ## 0x00 摘要 Celery是一個簡單、靈活且可靠的,處理大量訊息的分散式系統,專注於實時處理的非同步任務佇列,同時也支援任務排程。 本系列將通過原始碼分析,和大家一起深入學習 Celery。本文是系列第二篇,繼續探究

[原始碼解析] 並行分散式框架 Celery 之 worker 啟動 (1)

# [原始碼解析] 並行分散式框架 Celery 之 worker 啟動 (1) [toc] ## 0x00 摘要 Celery是一個簡單、靈活且可靠的,處理大量訊息的分散式系統,專注於實時處理的非同步任務佇列,同時也支援任務排程。Celery 是呼叫其Worker 元件來完成具體任務處理。 ```s

[原始碼解析] 並行分散式框架 Celery 之 worker 啟動 (2)

# [原始碼解析] 並行分散式框架 Celery 之 worker 啟動 (2) [toc] ## 0x00 摘要 Celery是一個簡單、靈活且可靠的,處理大量訊息的分散式系統,專注於實時處理的非同步任務佇列,同時也支援任務排程。Celery 是呼叫其Worker 元件來完成具體任務處理。 前文講了

十年Python大牛花了三天總結出來的python基礎知識實例,詳細

python 編程 大全 文檔 詳細 1、在Python 語言中,對象是通過引用傳遞的。2、多元賦值,其實就是元組賦值3、編寫模塊4、時刻記住一個事實5、動態類型6、變量在內存中是通過引用計數來跟蹤管理的7、異常處理8、所有的Python 對像都擁有三個特性9、布爾值10、對象身份比較11

Spring Boot簡明教程之資料訪問(二)JPA(詳細)

Spring Boot簡明教程之資料訪問(二):JPA(超詳細) 文章目錄 Spring Boot簡明教程之資料訪問(二):JPA(超詳細) 建立專案 Spring Data簡介 JPA簡介 Spring Data 與JP

Python高階程式設計——裝飾器Decorator詳細講解!

裝飾器decorator,是python語言的重要特性,上面一章節詳細講解了python裝飾器與python閉包的下篇內容,主要講解了什麼是python閉包,python閉包與裝飾器之間到底有什麼區別和聯絡。本文將介紹裝飾器系列文章補充篇,詳細介紹巢狀裝飾器的各部分類容,主要包括巢狀裝飾器的定義,執

Python並行程式設計(一)基本概念

  1、執行緒和程序       程序是應用程式的一個執行例項,比如,在桌面上雙擊瀏覽器將會執行一個瀏覽器。執行緒是一個控制流程,可以在程序內與其他活躍的執行緒同時執行。控制流程指的是順序執行一些機器指令。程序可以包含多個執行緒,所以開啟一個瀏覽器,作業系統將建立一個程序,並開始執行這個程序的主執行緒。每一

Python並行程式設計(二)基於執行緒的並行

1、介紹       軟體應用中使用最廣泛的並行程式設計範例是多執行緒。通常一個應用有一個程序,分成多個獨立的執行緒,並行執行、互相配合,執行不同型別的任務。       執行緒是獨立的處理流程,可以和系統的其他執行緒並行或併發地執行。多執行緒可以利用共享記憶體空間共享資料和資源。執行緒和程序的具體實現取決於

Python並行程式設計(三)執行緒同步Lock

1、基礎概念       當兩個或以上對共享記憶體操作的併發執行緒中,如果有一個改變資料,又沒有同步機制的條件下,就會產生競爭條件,可能會導致執行無效程式碼、bug等異常行為。       競爭條件最簡單的解決方法是使用鎖。鎖的操作非常簡單,當一個執行緒需要訪問部分共享記憶體時,它必須先獲得鎖才能訪問。此執

Python並行程式設計(五)執行緒同步之訊號量

1、基本概念       訊號量是由作業系統管理的一種抽象資料型別,用於在多執行緒中同步對共享資源的使用。本質上說,訊號量是一個內部資料,用於標明當前的共享資源可以有多少併發讀取。       同樣在threading中,訊號量有acquire和release兩個函式。       - 每當執行緒想要讀取關聯

Python並行程式設計(七)執行緒同步之事件

1、基本概念       事件是執行緒之間用於通訊的物件。有的執行緒等待訊號,有的執行緒發出訊號。基本上事件物件都會維護一個內部變數,可以通過set方法設定為true,也可以通過clear方法設定為false。wait方法將會阻塞執行緒,直到內部變數為true。 2、使用用例 # coding : utf

Python並行程式設計(九)執行緒通訊queue

1、基本概念       當執行緒之間要共享資源或資料的時候,可能變的非常複雜。Python的threading模組提供了很多同步原語,包括訊號量,條件變數,事件和鎖。如果可以使用這些原語的話,應該優先考慮使用這些,而不是使用queue模組。佇列操作起來更容易,也使多執行緒程式設計更安全,因為佇列可以將資源的

Python並行程式設計(十)多執行緒效能評估

1、基本概念       GIL是CPython直譯器引入的鎖,GIL在直譯器層面阻止了真正的並行執行。直譯器在執行任何執行緒之前,必須等待當前正在執行的執行緒釋放GIL,事實上,直譯器會強迫想要執行的執行緒必須拿到GIL才能訪問直譯器的任何資源,例如棧或Python物件等,這也正是GIL的目的,為了阻止不同

Python並行程式設計(十三)程序池和mpi4py模組

1、基本概念       多程序庫提供了Pool類來實現簡單的多程序任務。Pool類有以下方法:       - apply():直到得到結果之前一直阻塞。       - apply_async():這是apply()方法的一個變體,返回的是一個result物件。這是一個非同步的操作,在所有的子類執行之前不

Python實現楊輝三角,詳細

巧妙實現楊輝三角程式碼 def triangles(): N=[1]   #初始化為[1],楊輝三角的每一行為一個list while True: yield N  #yield 實現記錄功能,沒有下一個next將跳出迴圈, S=N[:]   #將l

python的flask框架的使用的詳細步驟

2018.05.16********************************************************** author: wills 閱讀以下內容預設掌握的知識:: 1. python基礎 2. 會使用pip