您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)Python celery有什么用?如何使用?,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
celery簡(jiǎn)介
celery是一個(gè)基于分布式消息傳輸?shù)漠惒饺蝿?wù)隊(duì)列,它專(zhuān)注于實(shí)時(shí)處理,同時(shí)也支持任務(wù)調(diào)度。它的執(zhí)行單元為任務(wù)(task),利用多線(xiàn)程,如Eventlet,gevent等,它們能被并發(fā)地執(zhí)行在單個(gè)或多個(gè)職程服務(wù)器(worker servers)上。任務(wù)能異步執(zhí)行(后臺(tái)運(yùn)行)或同步執(zhí)行(等待任務(wù)完成)。
在生產(chǎn)系統(tǒng)中,celery能夠一天處理上百萬(wàn)的任務(wù)。它的完整架構(gòu)圖如下:
組件介紹:
工作原理
它的基本工作就是管理分配任務(wù)到不同的服務(wù)器,并且取得結(jié)果。至于說(shuō)服務(wù)器之間是如何進(jìn)行通信的?這個(gè)Celery本身不能解決。所以,RabbitMQ作為一個(gè)消息隊(duì)列管理工具被引入到和Celery集成,負(fù)責(zé)處理服務(wù)器之間的通信任務(wù)。和rabbitmq的關(guān)系只是在于,celery沒(méi)有消息存儲(chǔ)功能,他需要介質(zhì),比如rabbitmq、redis、mysql、mongodb 都是可以的。推薦使用rabbitmq,他的速度和可用性都很高。
Celery安裝及使用
1、安裝celery
pip install celery
2、查看完整可用命令選項(xiàng)
celery worker --help
3、創(chuàng)建一個(gè)工程項(xiàng)目project,然后再項(xiàng)目?jī)?nèi)創(chuàng)建一個(gè)celery_tasks異步任務(wù)列表。如圖:
4、首先是celery_tasks異步任務(wù)主程序main.py,代碼如下:
from celery import Celery # 生成celery應(yīng)用 celery_app = Celery("caicai") # 加載配置文件 celery_app.config_from_object('celery_tasks.config') # 注冊(cè)任務(wù) celery_app.autodiscover_tasks(['celery_tasks.email']) # 注意:傳遞的參數(shù)是任務(wù)列表
分析一下這個(gè)程序:
5、接著是配置文件config.py,代碼如下:
BROKER_URL = 'redis://localhost:6379/1' # 使用Redis作為消息代理 CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' # 把任務(wù)結(jié)果存在了Redis # CELERY_TASK_SERIALIZER = 'msgpack' # 任務(wù)序列化和反序列化使用msgpack方案 CELERY_RESULT_SERIALIZER = 'json' # 讀取任務(wù)結(jié)果一般性能要求不高,所以使用了可讀性更好的JSON CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # celery任務(wù)結(jié)果有效期 CELERY_ACCEPT_CONTENT = ['json', 'msgpack'] # 指定接受的內(nèi)容類(lèi)型 CELERY_TIMEZONE = 'Asia/Shanghai' # celery使用的時(shí)區(qū) CELERY_ENABLE_UTC = True # 啟動(dòng)時(shí)區(qū)設(shè)置 CELERYD_LOG_FILE = "/var/log/celery/celery.log" # celery日志存儲(chǔ)位置
6、創(chuàng)建email目錄,目錄下創(chuàng)建tesks.py文件用來(lái)編寫(xiě)發(fā)送郵件的代碼,代碼如下:
import time from celery_tasks.main import celery_app @celery_app.task(name='seed_email') # 添加celery_app.task這個(gè)裝飾器,指定該任務(wù)的任務(wù)名name='seed_email' def seed(): time.sleep(1) return "我將發(fā)送郵件"
7、在項(xiàng)目app.py中,采用delay()用來(lái)調(diào)用任務(wù)。
from celery_tasks.email.tasks import seed seed.delay() seed.delay() seed.delay() seed.delay() seed.delay()
8、項(xiàng)目運(yùn)行
首先,我們需要啟動(dòng)redis。接著,切換至proj項(xiàng)目所在目錄,并運(yùn)行命令:
celery -A celery_tasks.main worker -l info
界面如下:
然后,我們運(yùn)行app.py,app.py調(diào)用添加異步任務(wù),輸出的結(jié)果如下:
關(guān)于Python celery有什么用?如何使用?就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。