當前位置:首頁 » 編程語言 » pythoncelery

pythoncelery

發布時間: 2024-01-31 06:49:38

『壹』 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是一個專注於實時處理和任務調度的分布式任務隊列。所謂任務就是消息,消息中的有效載荷中包含要執行任務需要的全部數據。

使用Celery的常見場景如下:
1. Web應用。當用戶觸發的一個操作需要較長時間才能執行完成時,可以把它作為任務交給Celery去非同步執行,執行完再返回給用戶。這段時間用戶不需要等待,提高了網站的整體吞吐量和響應時間。
2. 定時任務。生產環境經常會跑一些定時任務。假如你有上千台的伺服器、上千種任務,定時任務的管理很困難,Celery可以幫助我們快速在不同的機器設定不同種任務。
3. 同步完成的附加工作都可以非同步完成。比如發送簡訊/郵件、推送消息、清理/設置緩存等。
Celery還提供了如下的特性:
1. 方便地查看定時任務的執行情況,比如執行是否成功、當前狀態、執行任務花費的時間等。
2. 可以使用功能齊備的管理後台或者命令行添加、更新、刪除任務。
3. 方便把任務和配置管理相關聯。
4. 可選多進程、Eventlet和Gevent三種模式並發執行。
5. 提供錯誤處理機制。
- 提供多種任務原語,方便實現任務分組、拆分和調用鏈。
- 支持多種消息代理和存儲後端。

『叄』 Python 非同步任務隊列Celery 使用

在 Python 中定義 Celery 的時候,我們要引入 Broker,中文翻譯過來就是「中間人」的意思。在工頭(生產者)提出任務的時候,把所有的任務放到 Broker 裡面,在 Broker 的另外一頭,一群碼農(消費者)等著取出一個個任務准備著手做。這種模式註定了整個系統會是個開環系統,工頭對於碼農們把任務做的怎樣是不知情的。所以我們要引入 Backend 來保存每次任務的結果。這個 Backend 也是存儲任務的信息用的,只不過這里存的是那些任務的返回結果。我們可以選擇只讓錯誤執行的任務返回結果到 Backend,這樣我們取回結果,便可以知道有多少任務執行失敗了。

其實現架構如下圖所示:

可以看到,Celery 主要包含以下幾個模塊:

celery可以通過pip自動安裝。

broker 可選擇使用RabbitMQ/redis,backend可選擇使用RabbitMQ/redis/MongoDB。RabbitMQ/redis/mongoDB的安裝請參考對應的官方文檔。

------------------------------rabbitmq相關----------------------------------------------------------

官網安裝方法: http://www.rabbitmq.com/install-windows.html

啟動管理插件:sbin/rabbitmq-plugins enable rabbitmq_management 啟動rabbitmq:sbin/rabbitmq-server -detached

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

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

------------------------------rabbitmq相關--------------------------------------------------------

項目結構如下:

使用前,需要三個方面:celery配置,celery實例,需執行的任務函數,如下:

Celery 的配置比較多,可以在 官方配置文檔: http://docs.celeryproject.org/en/latest/userguide/configuration.html 查詢每個配置項的含義。

當然,要保證上述非同步任務and下述定時任務都能正常執行,就需要先啟動celery worker,啟動命令行如下:

啟動beat ,執行定時任務時, Celery會通過celery beat進程來完成。Celery beat會保持運行, 一旦到了某一定時任務需要執行時, Celery beat便將其加入到queue中. 不像worker進程, Celery beat只需要一個即可。而且為了避免有重復的任務被發送出去,所以Celery beat僅能有一個。

命令行啟動:

如果你想將celery worker/beat要放到後台運行,推薦可以扔給supervisor。

supervisor.conf如下:

『肆』 簡單強大的Python庫!Schele—實用的周期任務調度工具

如果你想在Linux伺服器上周期性地執行某個 Python 腳本,最出名的選擇應該是 Crontab 腳本,但是 Crontab 具有以下缺點:

1.不方便執行 秒級的任務

2.當需要執行的定時任務有上百個的時候,Crontab的 管理就會特別不方便

另外一個選擇是 Celery,但是 Celery 的配置比較麻煩,如果你只是需要一個輕量級的調度工具,Celery 不會是一個好選擇。

在你想要使用一個輕量級的任務調度工具,而且希望它盡量簡單、容易使用、不需要外部依賴,最好能夠容納 Crontab 的所有基本功能,那麼 Schele 模塊是你的不二之選。

使用它來調度任務可能只需要幾行代碼,感受一下:

上面的代碼表示每10分鍾執行一次 job 函數,非常簡單方便。你只需要引入 schele 模塊,通過調用 scele.every(時間數).時間類型.do(job) 發布周期任務。

發布後的周期任務需要用 run_pending 函數來檢測是否執行,因此需要一個 While 循環不斷地輪詢這個函數。

下面具體講講Schele模塊的安裝和初級、進階使用方法。

1.准備

請選擇以下任一種方式輸入命令安裝依賴

1. Windows 環境 打開 Cmd (開始-運行-CMD)。

2. MacOS 環境 打開 Terminal (command+空格輸入Terminal)。

3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.

2.基本使用

最基本的使用在文首已經提到過,下面給大家展示更多的調度任務例子:

可以看到,從月到秒的配置,上面的例子都覆蓋到了。不過 如果你想只運行一次任務 的話,可以這么配:

參數傳遞

如果你有參數需要傳遞給作業去執行,你只需要這么做:

獲取目前所有的作業

如果你想獲取目前所有的作業:

取消所有作業

如果某些機制觸發了,你需要立即清除當前程序的所有作業:

標簽功能

在設置作業的時候,為了後續方便管理作業,你可以給作業打個標簽,這樣你可以通過標簽過濾獲取作業或取消作業。

設定作業截止時間

如果你需要讓某個作業到某個時間截止,你可以通過這個方法:

截止日期之後,該作業將無法運行。

立即運行所有作業,而不管其安排如何

如果某個機制觸發了,你需要立即運行所有作業,可以調用 schele.run_all :

3.高級使用

裝飾器安排作業

如果你覺得設定作業這種形式太啰嗦了,也可以使用裝飾器模式:

並行執行

默認情況下,Schele 按順序執行所有作業。其背後的原因是,很難找到讓每個人都高興的並行執行模型。

不過你可以通過多線程的形式來運行每個作業以解決此限制:

日誌記錄

Schele 模塊同時也支持 logging 日誌記錄,這么使用:

效果如下:

異常處理

Schele 不會自動捕捉異常,它遇到異常會直接拋出,這會導致一個嚴重的問題: 後續所有的作業都會被中斷執行 ,因此我們需要捕捉到這些異常。

你可以手動捕捉,但是某些你預料不到的情況需要程序進行自動捕獲,加一個裝飾器就能做到了:

這樣, bad_task 在執行時遇到的任何錯誤,都會被 catch_exceptions 捕獲,這點在保證調度任務正常運轉的時候非常關鍵。

熱點內容
wow刷碎片腳本 發布:2024-11-29 15:58:24 瀏覽:590
明小子源碼 發布:2024-11-29 15:15:30 瀏覽:143
蘋果8plus什麼配置 發布:2024-11-29 14:16:36 瀏覽:677
androidmvp結構 發布:2024-11-29 14:16:34 瀏覽:536
androidsqlite命令 發布:2024-11-29 14:04:38 瀏覽:156
信用卡分期演算法 發布:2024-11-29 13:50:56 瀏覽:808
安卓手機dll文件為什麼打不開 發布:2024-11-29 13:40:49 瀏覽:1003
百分之五十石碳酸怎麼配置 發布:2024-11-29 13:38:56 瀏覽:974
我的世界伺服器如何裝資源包 發布:2024-11-29 13:25:48 瀏覽:22
mc伺服器的ip是什麼 發布:2024-11-29 13:23:33 瀏覽:570