Python celery原理及執行流程解析

2021-10-12 04:54:27 字數 2220 閱讀 4546

更多程式設計教程請到:菜鳥教程

高州陽光論壇

人人影視

celery簡介

celery是乙個基於分布式訊息傳輸的非同步任務佇列,它專注於實時處理,同時也支援任務排程。它的執行單元為任務(task),利用多執行緒,如eventlet,gevent等,它們能被併發地執行在單個或多個職程伺服器(worker servers)上。任務能非同步執行(後台執行)或同步執行(等待任務完成)。

在生產系統中,celery能夠一天處理上百萬的任務。它的完整架構圖如下:

元件介紹:

工作原理

它的基本工作就是管理分配任務到不同的伺服器,並且取得結果。至於說伺服器之間是如何進行通訊的?這個celery本身不能解決。所以,rabbitmq作為乙個訊息佇列管理工具被引入到和celery整合,負責處理伺服器之間的通訊任務。和rabbitmq的關係只是在於,celery沒有訊息儲存功能,他需要介質,比如rabbitmq、redis、mysql、mongodb 都是可以的。推薦使用rabbitmq,他的速度和可用性都很高。

celery安裝及使用

1、安裝celery

pip install celery

2、檢視完整可用命令選項

celery worker --help

3、建立乙個工程專案project,然後再專案內建立乙個celery_tasks非同步任務列表。如圖:

4、首先是celery_tasks非同步任務主程式main.py,**如下:

from celery import celery

# 生成celery應用

# 載入配置檔案

# 註冊任務

分析一下這個程式:

將任務註冊到應用中

5、接著是配置檔案config.py,**如下:

broker_url = 'redis://localhost:6379/1' # 使用redis作為訊息**

celery_result_backend = 『redis://localhost:6379/0』 # 把任務結果存在了redis

celery_result_serializer = 『json』 # 讀取任務結果一般效能要求不高,所以使用了可讀性更好的json

celery_task_result_expires = 60 * 60 * 24 # celery任務結果有效期

celery_accept_content = [『json』, 『msgpack』] # 指定接受的內容型別

celery_timezone = 『asia/shanghai』 # celery使用的時區

celery_enable_utc = true # 啟動時區設定

celeryd_log_file = 「/var/log/celery/celery.log」 # celery日誌儲存位置

6、建立email目錄,目錄下建立tesks.py檔案用來編寫傳送郵件的**,**如下:

import time

def seed():

time.sleep(1)

return "我將傳送郵件"

from celery_tasks.email.tasks import seed

seed.delay()

seed.delay()

seed.delay()

seed.delay()

seed.delay()

8、專案執行

首先,我們需要啟動redis。接著,切換至proj專案所在目錄,並執行命令:

celery -a celery_tasks.main worker -l info

介面如下:

Python celery原理及執行流程解析

python celery原理及執行流程解析 celery簡介 celery是乙個基於分布式訊息傳輸的非同步任務佇列,它專注於實時處理,同時也支援任務排程。它的執行單元為任務 task 利用多執行緒,如eventlet,gevent等,它們能被併發地執行在單個或多個職程伺服器 worker serv...

python celery學習筆記

專案中需要非同步執行某個任務,且失敗的時候需要重試,且需要知道是否執行成功,可以這樣設計。案例 如下 task def test task args,kwargs 處理邏輯 return truedef home request from celery tasks import test task ...

python celery 任務排程器

celery是python開發的分布式任務排程模組,今天抽空看了一下,果然介面簡單,開發容易,5分鐘就寫出了乙個非同步傳送郵件的服務。celery本身不含訊息服務,它使用第三方訊息服務來傳遞任務,目前,celery支援的訊息服務有rabbitmq redis甚至是資料庫,當然redis應該是最佳選擇...