本文目錄一覽:
Celery 簡介
任務隊列是一種把任務通過線程或機器進行分發的機制,輸入是一個工作單元–任務,工作進程則不斷地檢查任務隊列來執行新任務。
celery使用消息來通信,通常需要中間件中轉。流程為:客戶端添加消息到隊列來初始化一個任務,然後消息隊列系統把消息分發給工作進程。
celery可以包含多個工作進程和消息隊列系統,來保證高可用性和進行水平擴展。
雖然celery是python實現的,仍可輕鬆實現其他語言的客戶端,如php js,或可可使用webhooks來交互。
可在單台機器、多台機器、集群中運行
需要py2.7+ 不支持win
需要rabbitmq或redis作為消息中間件
不需要配置文件
工作進程和客戶端在連接丟失或失敗時會自動重試,一些支持HA的消息系統可以做主主、主從擴展
每分鐘處理幾百萬任務,通過使用RabbitMQ librabbitmq 和 一些優化設置,可使得rtt為亞毫秒級
它的每一部分都可以靈活地擴展(自定義的pool,序列化方式,壓縮,日誌,定時任務,消費者,生產者,中間件)
redis rabbitmq
redis amqp memcached orm apache-Cassandra ES
fork eventlet gevent 單線程
pickle json yaml 另支持壓縮 簽名 加密
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 使用
在 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如下:
原創文章,作者:MXMG,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/141153.html