celery非同步任務體系筆記

2022-06-08 02:15:12 字數 1680 閱讀 9149

1.非同步框架示意圖

2.celery 官方文件

3.啟動celery的命令

啟動 sender

自動檢測

啟動worker

自動檢測

4.broker和backend

broker(任務儲存)和backend(結果儲存)都是用的是rmq,backend中的資料會有自動過期機制,1小時後結果將自動過期(可以任意修改)。

5.架構設計

1.傳送任務

所有的複雜邏輯都在傳送端進行處理,將需要執行的任務序列確定好後,放入rmq中,不考慮在rmq上有什麼複雜操作。 暫時只用乙個docker,將所有的非同步任務都放到rmq中。

2.執行任務

執行任務只是簡單的執行具體的函式比如傳送郵件之類,從rmq 中獲取到該worker相對應的任務直接執行,邏輯較為簡單。可以根據任務的數量動態的增減docker的數目。一類任務是乙個task.py檔案,相當於任務之間相互隔離,每個worker只執行特定的一種任務。

3.獲取任務結果

提交任務後會返回任務的唯一id,需要主動去根據任務id獲取執行結果。要把任務id和一些必要資訊存在mysql中。檢查邏輯應該跟具體任務來設計,會關聯到不同的事件。

傳送郵件任務

1.celery的配置

1.1beat端

啟動命令

python

# 啟動timed 命令

celery -a mtk_celery.cel worker -l info -c 1 -q timed

# 啟動job 命令

celery -a mtk_celery.cel worker -l info -q job

# 啟動beat命令

celery -a mtk_celery.cel beat -l info

# celery 路由設定

# -c 指定 worker 數目

# -q 指定 佇列型別

# 需要啟動兩種不同的執行者 timed 型別 只能啟動乙個worker , job 型別沒有限制

celery路由相當於給不同任務分組,給不同型別的任務指定不同的queue,啟動時帶上引數q,該worker,會只完成該queue中的非同步任務

task_routes = ,

'mtk_celery.edm_timed': ,

'mtk_celery.edm_jobs':

}celery定時任務 配置

python

# 定義定時任務

beat_schedule =

}# 將定時任務加入beat中

cel.conf.update(

result_expires=3600 * 2,

beat_schedule=beat_schedule,

task_routes=task_routes

)2.worker端

2.1 timed端

將需要執行的任務指定在配置中,啟動beat 即可,timed 會捕獲到該任務進行執行,由於會有併發衝突,可能會讀取到同乙個edm,所以單獨拆分出來,該worker只擁有乙個,保證不會出現執行緒不安全問題。

2.2 send端

不存在併發執行緒不安全問題,直接啟動多個處理端傳送即可。

celery 非同步任務佇列

celery是基於python開發的分布式任務佇列。它可以讓任務的執行完全脫離主程式,甚至可以被分配到其他主機上執行。我們通常使用它來實現非同步任務 async task 和定時任務 crontab 它的架構組成如下圖 celery 4.x以上版本不安裝該模組,新增任務時會報錯 使用celery包含...

非同步任務 celery傳送郵件

安裝兩個python包 pip install celery 3.1.25 pip install django celery 3.1.17 在配置檔案settings.py中做如下配置 a 首先註冊應用djcelery並做如下配置。import djcelerydjcelery.setup loa...

celery非同步,延時任務, 週期任務

celery中文譯為芹菜,是乙個分布式任務佇列.是非同步的,所以能處理大量訊息 最新的celery不支援windows下使用了,所以在使用pycharm安裝celery模組之後,需要再安裝eventlet模組才能測試執行.啟動客戶端 s1,s2要在專案目錄下,如果在資料夾中執行,terminal輸入...