本文目錄一覽:
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
希望能幫到你!
golang 有什麼比較好得分佈式任務隊列,類似Python的celery
nsq 雖然可以實現. 但是nsq的定時任務現在還無法持久化, 如果定時任務未執行期間nsq服務被重啟將丟失.
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/285586.html