celery 非同步任務佇列

2022-10-10 09:09:08 字數 1740 閱讀 6150

celery是基於python開發的分布式任務佇列。

它可以讓任務的執行完全脫離主程式,甚至可以被分配到其他主機上執行。我們通常使用它來實現非同步任務(async task)和定時任務(crontab)。它的架構組成如下圖 :

#celery 4.x以上版本不安裝該模組,新增任務時會報錯

使用celery包含三個方面

定義任務函式

執行celery服務

將任務函式新增到broker

定義檔案目錄結構如下:

建立celery_task.py檔案輸入下列**

import

time

from celery import

celery

broker = "

redis:"#

123456為redis密碼

backend = "

redis:"#

儲存執行結果

celery_test

", broker=broker, backend=backend) #

第1個引數為任務的名稱

deftask1(x, y):

time.sleep(5)

return x + y

進入celery_task.py檔案所在目錄,執行下面命令

celery -a celery_task worker --loglevel=info -p eventlet
celery_task為 定義任務函式 的檔案路徑id

啟動成功截圖如下

建立add_task.py檔案輸入下列**

import

time

from celery_task import

task1

#將任務新增到broker中

result = task1.delay(1, 2)

#檢視任務是否執行完成。true表示任務已執行,false表示任務還在執行中

print('

任務執行完成狀態: %s

' % result.ready()) #

time.sleep(6)

print('

任務執行完成狀態: %s

' %result.ready())

run_result = result.get(timeout=1)

print('

任務執行結果: %s

' % run_result)

執行結果如下:

流程說明:執行dd_task.py檔案會將task1任務新增到broker中,worker服務監控獲取到broker中新增的task1任務,就執行該任務,任務執行完後將執行結果儲存在backend中。

非同步任務佇列Celery在Django中的使用

前段時間在django web平台開發中,碰到一些請求執行的任務時間較長 幾分鐘 為了加快使用者的響應時間,因此決定採用非同步任務的方式在後台執行這些任務。在同事的指引下接觸了celery這個非同步任務佇列框架,鑑於網上關於celery和django結合的文件較少,大部分也只是粗粗介紹了大概的流程,...

非同步任務佇列Celery在Django中的使用

前段時間在django web平台開發中,碰到一些請求執行的任務時間較長 幾分鐘 為了加快使用者的響應時間,因此決定採用非同步任務的方式在後台執行這些任務。在同事的指引下接觸了celery這個非同步任務佇列框架,鑑於網上關於celery和django結合的文件較少,大部分也只是粗粗介紹了大概的流程,...

非同步任務佇列Celery在Django中的使用

前段時間在django web平台開發中,碰到一些請求執行的任務時間較長 幾分鐘 為了加快使用者的響應時間,因此決定採用非同步任務的方式在後台執行這些任務。在同事的指引下接觸了celery這個非同步任務佇列框架,鑑於網上關於celery和django結合的文件較少,大部分也只是粗粗介紹了大概的流程,...