<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Celery
是由Python
編寫的簡單,靈活,可靠的用來處理大量資訊的分散式系統,它同時提供操作和維護分散式系統所需的工具。Celery
專注於實時任務處理,支援任務排程。
簡單的說,它就是一個分散式佇列的管理工具,用celery提供的介面快速實現並管理一個分散式的任務佇列。
有一點我們需要搞清楚,Celery
本身並不是任務佇列,它是一個分散式佇列的管理工具
,Celery封裝好了操作常見任務佇列的各種操作,比如說從監聽某個任務佇列並從該佇列中拿到資料進行消費。
它可以讓任務的執行完全脫離主程式,甚至可以被分配到其他主機上執行。我們通常使用它來實現非同步任務(async task
)和定時任務(crontab
)。
Celery
去非同步執行,比如傳送簡訊/郵件、訊息推播、音視訊處理等等這裡用一張圖片說明下:
Celery的架構由三部分組成,訊息中介軟體(message broker
),任務執行單元(worker
)和任務執行結果儲存(task result store
)組成。
訊息中介軟體:
Celery本身不提供訊息服務,但是可以方便的和第三方提供的訊息中介軟體整合。包括RabbitMQ
, Redis
等等,官方推薦用rabbitMQ
,因為它持久穩定。
任務執行單元:
Worker
是Celery
提供的任務執行的單元,worker
並行的執行在分散式的系統節點中。
任務結果儲存:
Task result store
用來儲存Worker執行的任務的結果,Celery
支援以不同方式儲存任務的結果,包括AMQP, redis
等
另外, Celery還支援不同的並行和序列化的手段。
並行:Prefork, Eventlet, gevent, threads/single threaded
序列化:pickle, json, yaml, msgpack. zlib, bzip2 compression, Cryptographic message signing 等等 先安裝模組
pip install celery pip install redis
這裡專案結構如下:
第一步:先建立celery相關設定設定celery_object.py
import celery # 執行如下命令: celery -A celery_object worker -l info backend = "redis://127.0.0.1:6379/4" # 設定redis的4號資料庫來存放結果 broker = "redis://127.0.0.1:6379/5" # 設定redis的5號資料庫存放訊息中介軟體 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" # 時區 celery_app.conf.enable_utc = False # 是否使用UTC
引數說明:
第二步:建立任務相關的檔案celery_task.py
import time from celery_object import celery_app @celery_app.task def send_email(name): print("向%s傳送郵件..." % name) time.sleep(5) print("向%s傳送郵件完成" % name) return f"成功拿到{name}傳送的郵件!" @celery_app.task def send_msg(name): print("向%s傳送簡訊..." % name) time.sleep(5) print("向%s傳送簡訊完成" % name) return f"成功拿到{name}傳送的簡訊!"
通過@celery_app.task
這樣的裝飾器,成功的把對應的函數變成對應celery
的非同步worker
函數。
緊接著我們在專案當前所在的目錄執行命令:
celery -A celery_object worker -l info
info
級別的紀錄檔之後就可以有下面的輸出顯示就代表celery
啟動成功:
之後我們就可以向celery
生產任務了,建立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)
執行生產任務的程式,會看到如下的資料,這裡列印的就是任務ID。
然後在終端可以看到下面的東西,就代表celery
成功的拿到佇列中任務 並進行消費了。
然後開啟我們的redis
可以看到有對應的資料記錄。
與此同時 我們還可以檢視celery任務ID的狀態,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("任務狀態:", async_result.status) if async_result.successful(): result = async_result.get() print(result) # result.forget() # 將結果刪除 elif async_result.failed(): print("執行失敗") elif async_result.status == "PENDING": print("任務等待中被執行") elif async_result.status == "RETRY": print("任務異常後正在重試") elif async_result.status == "STARTED": print("任務已經開始被執行")
執行結果:
任務狀態: SUCCESS
成功拿到李四0傳送的簡訊!
到此這篇關於python中celery的基本使用詳情的文章就介紹到這了,更多相關python celery內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45