本文目錄一覽:
- 1、twisted,celery有何區別
- 2、celery是python寫的還是c寫的
- 3、Python 異步任務隊列Celery 使用
- 4、python 使用celery為了解決什麼業務問題
- 5、Django配置Celery執行異步和同步任務(tasks))
- 6、python celery 怎麼配置到集群
twisted,celery有何區別
一,英語語言角度:二者詞性,詞義,都相去甚遠
。
twisted
twist的過去式和過去分詞形式,可單獨作形容詞,意為:擰的;古怪的
celery
名詞
蔬菜類,我們常見的
西芹
芹菜
或(調味用)
香芹粉
二,計算機語言角度
Celery
(芹菜)是基於Python開發的分佈式任務調度模塊。它支持使用任務隊列的方式在分佈的機器/進程/線程上執行任務調度。它不僅專註於實時操作,還支持計劃性任務調度。
Twisted是用Python實現的基於事件驅動的網絡引擎框架。它支持許多常見的傳輸及應用層協議,包括TCP、UDP、SSL/TLS、HTTP、IMAP、SSH、IRC以及FTP。
二者的交集是:Python語言
二者不同是:Celery是任務調度模塊,Twisted是網絡編程框架
celery是python寫的還是c寫的
Celery is written in Python, but the protocol can be implemented in any language. In addition to Python there’s node-celeryfor Node.js, and a PHP client.
這是摘自celery在githup上的原話,翻譯過來就是:Celery使用python寫的,但是該協議可以被任何語言實現,除了python,還有Node.js的node-celery和php的客戶端
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如下:
python 使用celery為了解決什麼業務問題
Celery是一個專註於實時處理和任務調度的分佈式任務隊列。所謂任務就是消息,消息中的有效載荷中包含要執行任務需要的全部數據。
使用Celery的常見場景如下:
1. Web應用。當用戶觸發的一個操作需要較長時間才能執行完成時,可以把它作為任務交給Celery去異步執行,執行完再返回給用戶。這段時間用戶不需要等待,提高了網站的整體吞吐量和響應時間。
2. 定時任務。生產環境經常會跑一些定時任務。假如你有上千台的服務器、上千種任務,定時任務的管理很困難,Celery可以幫助我們快速在不同的機器設定不同種任務。
3. 同步完成的附加工作都可以異步完成。比如發送短訊/郵件、推送消息、清理/設置緩存等。
Celery還提供了如下的特性:
1. 方便地查看定時任務的執行情況,比如執行是否成功、當前狀態、執行任務花費的時間等。
2. 可以使用功能齊備的管理後台或者命令行添加、更新、刪除任務。
3. 方便把任務和配置管理相關聯。
4. 可選多進程、Eventlet和Gevent三種模式並發執行。
5. 提供錯誤處理機制。
– 提供多種任務原語,方便實現任務分組、拆分和調用鏈。
– 支持多種消息代理和存儲後端。
Django配置Celery執行異步和同步任務(tasks))
celery是一個基於python開發的簡單、靈活且可靠的分佈式任務隊列框架,支持使用任務隊列的方式在分佈式的機器/進程/線程上執行任務調度。採用典型的生產者-消費者模型,主要由三部分組成:
比如系統上線前後台批量導入歷史數據,發送短訊、發送郵件等耗時的任務
1.安裝RabbitMQ,這裡我們使用RabbitMQ作為broker,安裝完成後默認啟動了,也不需要其他任何配置
Ubuntu linux安裝
CentOS Linux 安裝
蘋果mac 安裝需要配置
配置環境變量 (蘋果用戶)
啟動rabbitmq-server
2.安裝celery
3.celery用在django項目中,django項目目錄結構(簡化)如下
4.創建 oa/celery.py 主文件
5.在 oa/__init__.py 文件中增加如下內容,確保django啟動的時候這個app能夠被加載到
6.各應用創建tasks.py文件,這裡為 users/tasks.py
7.views.py中引用使用這個tasks異步處理
8.啟動celery
9.這樣在調用post這個方法時,裡邊的add就可以異步處理了
定時任務的使用場景就很普遍了,比如我需要定時發送報告給老闆~
1. oa/celery.py 文件添加如下配置以支持定時任務crontab
3.啟動celery beat,celery啟動了一個beat進程一直在不斷的判斷是否有任務需要執行
python celery 怎麼配置到集群
Celery是一個基於Python的分佈式並行處理框架,通過消息總線進行任務調度,非常靈活。
它有輸入和輸出通道,通過輸入通道連接到broker(如AMQP服務Channel)或者通過輸出通道連接到結果的backend(用於獲取結果,不是必須的,因為有的操作只是單向分發任務)。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/248124.html