本文目錄一覽:
- 1、python 使用celery為了解決什麼業務問題
- 2、python celery 怎麼配置到集群
- 3、Python 非同步任務隊列Celery 使用
- 4、celery python 好用嗎
- 5、python celery 啟動實例一定要藉助第三方服務嗎???
python 使用celery為了解決什麼業務問題
Celery是一個專註於實時處理和任務調度的分散式任務隊列。所謂任務就是消息,消息中的有效載荷中包含要執行任務需要的全部數據。
使用Celery的常見場景如下:
1. Web應用。當用戶觸發的一個操作需要較長時間才能執行完成時,可以把它作為任務交給Celery去非同步執行,執行完再返回給用戶。這段時間用戶不需要等待,提高了網站的整體吞吐量和響應時間。
2. 定時任務。生產環境經常會跑一些定時任務。假如你有上千台的伺服器、上千種任務,定時任務的管理很困難,Celery可以幫助我們快速在不同的機器設定不同種任務。
3. 同步完成的附加工作都可以非同步完成。比如發送簡訊/郵件、推送消息、清理/設置緩存等。
Celery還提供了如下的特性:
1. 方便地查看定時任務的執行情況,比如執行是否成功、當前狀態、執行任務花費的時間等。
2. 可以使用功能齊備的管理後台或者命令行添加、更新、刪除任務。
3. 方便把任務和配置管理相關聯。
4. 可選多進程、Eventlet和Gevent三種模式並發執行。
5. 提供錯誤處理機制。
– 提供多種任務原語,方便實現任務分組、拆分和調用鏈。
– 支持多種消息代理和存儲後端。
python celery 怎麼配置到集群
Celery是一個基於Python的分散式並行處理框架,通過消息匯流排進行任務調度,非常靈活。
它有輸入和輸出通道,通過輸入通道連接到broker(如AMQP服務Channel)或者通過輸出通道連接到結果的backend(用於獲取結果,不是必須的,因為有的操作只是單向分發任務)。
Python 非同步任務隊列Celery 使用
在 Python 中定義 Celery 的時候,我們要引入 Broker,中文翻譯過來就是「中間人」的意思。在工頭(生產者)提出任務的時候,把所有的任務放到 Broker 裡面,在 Broker 的另外一頭,一群碼農(消費者)等著取出一個個任務準備著手做。這種模式註定了整個系統會是個開環系統,工頭對於碼農們把任務做的怎樣是不知情的。所以我們要引入 Backend 來保存每次任務的結果。這個 Backend 也是存儲任務的信息用的,只不過這裡存的是那些任務的返回結果。我們可以選擇只讓錯誤執行的任務返回結果到 Backend,這樣我們取回結果,便可以知道有多少任務執行失敗了。
其實現架構如下圖所示:
可以看到,Celery 主要包含以下幾個模塊:
celery可以通過pip自動安裝。
broker 可選擇使用RabbitMQ/redis,backend可選擇使用RabbitMQ/redis/MongoDB。RabbitMQ/redis/mongoDB的安裝請參考對應的官方文檔。
——————————rabbitmq相關———————————————————-
官網安裝方法:
啟動管理插件:sbin/rabbitmq-plugins enable rabbitmq_management 啟動rabbitmq:sbin/rabbitmq-server -detached
rabbitmq已經啟動,可以打開頁面來看看 地址:
用戶名密碼都是guest 。進入可以看到具體頁面。 關於rabbitmq的配置,網上很多 自己去搜以下就ok了。
——————————rabbitmq相關——————————————————–
項目結構如下:
使用前,需要三個方面:celery配置,celery實例,需執行的任務函數,如下:
Celery 的配置比較多,可以在 官方配置文檔: 查詢每個配置項的含義。
當然,要保證上述非同步任務and下述定時任務都能正常執行,就需要先啟動celery worker,啟動命令行如下:
需 啟動beat ,執行定時任務時, Celery會通過celery beat進程來完成。Celery beat會保持運行, 一旦到了某一定時任務需要執行時, Celery beat便將其加入到queue中. 不像worker進程, Celery beat只需要一個即可。而且為了避免有重複的任務被發送出去,所以Celery beat僅能有一個。
命令行啟動:
如果你想將celery worker/beat要放到後台運行,推薦可以扔給supervisor。
supervisor.conf如下:
celery python 好用嗎
為什麼要使用celery
Celery是一個使用Python開發的分散式任務調度模塊,因此對於大量使用Python構建的系統,可以說是無縫銜接,使用起來很方便。Celery專註於實時處理任務,同時也支持任務的定時調度。因此適合實時非同步任務定時任務等調度場景。Celery需要依靠RabbitMQ等作為消息代理,同時也支持Redis甚至是Mysql,Mongo等,當然,官方默認推薦的是RabbitMQ。
broker的選擇
雖然官方支持的broker有很多,包括RabbitMQ,Redis甚至是資料庫,但是不推薦使用資料庫,因為資料庫需要不斷訪問磁碟,當你的任務量大了之後會造成很嚴重的性能問題,同時你的應用很可能也在使用同一個資料庫,這樣可能導致你的應用被拖垮。如果業務環境比較簡單可以選擇Redis,如果比較複雜選擇RabbitMQ,因為RabbitMQ是官方推薦的,但是比Redis操作起來又相對複雜些。我的選擇是broker用RabbitMQ,backend用Redis
希望能幫到你!
python celery 啟動實例一定要藉助第三方服務嗎???
The first argument to Celery is the name of the current module, this is needed so that names can be automatically generated, the second argument is the broker keyword argument which specifies the URL of the message broker you want to use, using RabbitMQ here, which is already the default option. See Choosing a Broker above for more choices, e.g. for Redis you can use redis://localhost, or MongoDB:mongodb://localhost.
第一個參數是當前模塊的名稱,這是必要的,名字可以自動生成的,第二個參數是broker 關鍵字參數指定要使用的消息代理URL,這裡是RabbitMQ,也是默認選項。
也就是說要先裝RabbitMQ
原創文章,作者:FFUP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/139463.html