最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中celery的基本使用詳情

 更新時間:2022年09月30日 10:29:35   作者:埃菲爾沒有塔尖  
這篇文章主要介紹了python中celery的基本使用詳情,Celery 是由Python 編寫的簡單,靈活,可靠的用來處理大量信息的分布式系統(tǒng),它同時提供操作和維護分布式系統(tǒng)所需的工具。Celery 專注于實時任務處理,支持任務調度

1.基本介紹

Celery 是由Python 編寫的簡單,靈活,可靠的用來處理大量信息的分布式系統(tǒng),它同時提供操作和維護分布式系統(tǒng)所需的工具。Celery 專注于實時任務處理,支持任務調度。

簡單的說,它就是一個分布式隊列的管理工具,用celery提供的接口快速實現(xiàn)并管理一個分布式的任務隊列。

有一點我們需要搞清楚,Celery 本身并不是任務隊列,它是一個分布式隊列的管理工具,Celery封裝好了操作常見任務隊列的各種操作,比如說從監(jiān)聽某個任務隊列并從該隊列中拿到數(shù)據(jù)進行消費。

2.使用場景

它可以讓任務的執(zhí)行完全脫離主程序,甚至可以被分配到其他主機上運行。我們通常使用它來實現(xiàn)異步任務(async task)和定時任務(crontab)。

  • 異步任務: 將耗時操作任務提交給Celery去異步執(zhí)行,比如發(fā)送短信/郵件、消息推送、音視頻處理等等
  • 定時任務: 定時執(zhí)行某件事情,比如每天數(shù)據(jù)統(tǒng)計

3.工作流程和組成部分

這里用一張圖片說明下:

Celery的架構由三部分組成,消息中間件(message broker),任務執(zhí)行單元(worker)和任務執(zhí)行結果存儲(task result store)組成。

消息中間件:

Celery本身不提供消息服務,但是可以方便的和第三方提供的消息中間件集成。包括RabbitMQ, Redis等等,官方推薦用rabbitMQ,因為它持久穩(wěn)定。

任務執(zhí)行單元:

WorkerCelery提供的任務執(zhí)行的單元,worker并發(fā)的運行在分布式的系統(tǒng)節(jié)點中。

任務結果存儲:

Task result store用來存儲Worker執(zhí)行的任務的結果,Celery支持以不同方式存儲任務的結果,包括AMQP, redis

另外, Celery還支持不同的并發(fā)和序列化的手段。

并發(fā):Prefork, Eventlet, gevent, threads/single threaded

序列化:pickle, json, yaml, msgpack. zlib, bzip2 compression, Cryptographic message signing 等等 先安裝模塊

pip install celery
pip install redis

4.Celery執(zhí)行異步任務

4.1 基礎使用

這里項目結構如下:

第一步:先創(chuàng)建celery相關配置配置celery_object.py

import celery

# 執(zhí)行如下命令: celery -A celery_object worker -l info

backend = "redis://127.0.0.1:6379/4"  # 設置redis的4號數(shù)據(jù)庫來存放結果
broker = "redis://127.0.0.1:6379/5"  # 設置redis的5號數(shù)據(jù)庫存放消息中間件
celery_app = celery.Celery(
    "celery_demo",
    backend=backend,
    broker=broker,
    include=[
        "celery_task",
    ],
)

celery_app.conf.task_serializer = "json"
celery_app.conf.result_serializer = "json"
celery_app.conf.accept_content = ["json"]

celery_app.conf.timezone = "Asia/Shanghai"  # 時區(qū)
celery_app.conf.enable_utc = False  # 是否使用UTC

參數(shù)說明:

  • backend 就是異步任務執(zhí)行完成以后,結果存放的地方。
  • broker 就是具體執(zhí)行任務的工作節(jié)點。
  • celery.Celery()方法是實例化一個celery對象。

第二步:創(chuàng)建任務相關的文件celery_task.py

import time

from celery_object import celery_app

@celery_app.task
def send_email(name):
    print("向%s發(fā)送郵件..." % name)
    time.sleep(5)
    print("向%s發(fā)送郵件完成" % name)
    return f"成功拿到{name}發(fā)送的郵件!"

@celery_app.task
def send_msg(name):
    print("向%s發(fā)送短信..." % name)
    time.sleep(5)
    print("向%s發(fā)送短信完成" % name)
    return f"成功拿到{name}發(fā)送的短信!"

通過@celery_app.task這樣的裝飾器,成功的把對應的函數(shù)變成對應celery的異步worker函數(shù)。

緊接著我們在項目當前所在的目錄執(zhí)行命令:

celery -A celery_object worker -l info
  • -A 指的是application應用對象
  • worker 就是工作人(固定寫法)
  • -l 指的是日志級別,這里是打印info級別的日志

之后就可以有下面的輸出顯示就代表celery動成功:

之后我們就可以向celery生產任務了,創(chuàng)建produce_result.py文件。

from celery_task import send_email, send_msg

if __name__ == "__main__":
    for i in range(10):
        result = send_email.delay(f"張三{i}")
        print(result.id)
        result2 = send_msg.delay(f"李四{i}")
        print(result2.id)

運行生產任務的程序,會看到如下的數(shù)據(jù),這里打印的就是任務ID。

然后在終端可以看到下面的東西,就代表celery成功的拿到隊列中任務 并進行消費了。

然后打開我們的redis可以看到有對應的數(shù)據(jù)記錄。

與此同時 我們還可以查看celery任務ID的狀態(tài),check_result.py寫入如下:

from celery.result import AsyncResult
from celery_object import celery_app

async_result = AsyncResult(id="d1c722fa-4ebf-432e-967e-a462bdefeac4", app=celery_app)
print("任務狀態(tài):", async_result.status)
if async_result.successful():
    result = async_result.get()
    print(result)
    # result.forget() # 將結果刪除
elif async_result.failed():
    print("執(zhí)行失敗")
elif async_result.status == "PENDING":
    print("任務等待中被執(zhí)行")
elif async_result.status == "RETRY":
    print("任務異常后正在重試")
elif async_result.status == "STARTED":
    print("任務已經(jīng)開始被執(zhí)行")

運行結果:

任務狀態(tài): SUCCESS
成功拿到李四0發(fā)送的短信!

到此這篇關于python中celery的基本使用詳情的文章就介紹到這了,更多相關python celery內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python網(wǎng)絡爬蟲精解之pyquery的使用說明

    python網(wǎng)絡爬蟲精解之pyquery的使用說明

    PyQuery是一個類似于jQuery的解析網(wǎng)頁工具,使用lxml操作xml和html文檔,它的語法和jQuery很像。和XPATH,Beautiful Soup比起來,PyQuery更加靈活,提供增加節(jié)點的class信息,移除某個節(jié)點,提取文本信息等功能
    2021-09-09
  • Python實現(xiàn)合并兩個字典的8種方法

    Python實現(xiàn)合并兩個字典的8種方法

    Python有多種方法可以通過使用各種函數(shù)和構造函數(shù)來合并字典,本文主要介紹了Python實現(xiàn)合并兩個字典的8種方法,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • 解決Ubuntu pip 安裝 mysql-python包出錯的問題

    解決Ubuntu pip 安裝 mysql-python包出錯的問題

    今天小編就為大家分享一篇解決Ubuntu pip 安裝 mysql-python包出錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 詳解Django中的ifequal和ifnotequal標簽使用

    詳解Django中的ifequal和ifnotequal標簽使用

    這篇文章主要介紹了詳解Django中的ifequal和ifnotequal標簽使用,Django是重多高人氣Python框架中最為著名的一個,需要的朋友可以參考下
    2015-07-07
  • Python3多線程操作簡單示例

    Python3多線程操作簡單示例

    這篇文章主要介紹了Python3多線程操作,結合實例形式分析了Python3兼容Python2使用_thread進行多線程操作的簡單實現(xiàn)技巧,需要的朋友可以參考下
    2018-05-05
  • Python list運算操作代碼實例解析

    Python list運算操作代碼實例解析

    這篇文章主要介紹了Python list運算操作代碼實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • python+Tesseract OCR實現(xiàn)截屏識別文字

    python+Tesseract OCR實現(xiàn)截屏識別文字

    pytesseract Python常用pytesseract進行圖片上的文字識別,本文主要介紹了python+Tesseract?OCR實現(xiàn)截屏識別文字,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • pycharm安裝django框架詳細圖文教程(指定版本)

    pycharm安裝django框架詳細圖文教程(指定版本)

    這篇文章主要給大家介紹了關于pycharm安裝django框架(指定版本)的相關資料,PyCharm是一種Python?IDE,帶有一整套可以幫助用戶在使用Python語言開發(fā)時提高其效率的工具,需要的朋友可以參考下
    2023-10-10
  • Python標準庫之itertools庫的使用方法

    Python標準庫之itertools庫的使用方法

    Python提供了一個非常棒的模塊用于創(chuàng)建自定義的迭代器,這個模塊就是 itertools。itertools 提供的工具相當高效且節(jié)省內存,下面這篇文章主要給大家介紹了關于Python標準庫之itertools庫使用的相關資料,需要的朋友可以參考下。
    2017-09-09
  • Python使用itertools模塊實現(xiàn)排列組合功能示例

    Python使用itertools模塊實現(xiàn)排列組合功能示例

    這篇文章主要介紹了Python使用itertools模塊實現(xiàn)排列組合功能,涉及Python基于itertools模塊product、permutations與combinations_with_replacement方法進行排列、組合等相關操作實現(xiàn)技巧,需要的朋友可以參考下
    2018-07-07

最新評論

海城市| 芷江| 陇川县| 浪卡子县| 改则县| 宽甸| 化德县| 唐河县| 丹巴县| 湖州市| 调兵山市| 衡水市| 高清| 旺苍县| 陕西省| 托克托县| 昌乐县| 库车县| 神池县| 鄄城县| 定安县| 双柏县| 高雄市| 新昌县| 五峰| 堆龙德庆县| 和顺县| 郎溪县| 德保县| 佛山市| 蓬溪县| 运城市| 扶绥县| 凤山县| 阜新市| 绥德县| 罗平县| 云霄县| 滦平县| 永兴县| 刚察县|