摘要:使用消息來通信,流程為客戶端添加消息到隊(duì)列來初始化一個(gè)任務(wù),然后消息隊(duì)列系統(tǒng)把消息分發(fā)給工作進(jìn)程??梢园鄠€(gè)工作進(jìn)程和消息系統(tǒng),來保證高可用性和進(jìn)行水平擴(kuò)展。保存結(jié)果可以使用很多例如的,,。
celery是一個(gè)簡單的、靈活的、可靠的分布式系統(tǒng),提供了工具來維護(hù)這樣一個(gè)系統(tǒng),用于處理大量的信息(實(shí)時(shí)信息、定時(shí)任務(wù)安排),是一個(gè)任務(wù)隊(duì)列,易于使用,易于和其他語言進(jìn)行配合。
任務(wù)隊(duì)列任務(wù)隊(duì)列是一種把任務(wù)通過線程或機(jī)器進(jìn)行分發(fā)的機(jī)制,輸入是一個(gè)工作單元--任務(wù),工作進(jìn)程則不斷地檢查任務(wù)隊(duì)列來執(zhí)行新任務(wù)。celery使用消息來通信,流程為:客戶端添加消息到隊(duì)列來初始化一個(gè)任務(wù),然后消息隊(duì)列系統(tǒng)把消息分發(fā)給工作進(jìn)程。celery可以包含多個(gè)工作進(jìn)程和消息系統(tǒng),來保證高可用性和進(jìn)行水平擴(kuò)展。
特性簡單,不需要配置文件,高可靠性(工作進(jìn)程和客戶端在連接丟失或失敗時(shí)會(huì)自動(dòng)重試,一些支持HA的消息系統(tǒng)可以做主主、主從擴(kuò)展),快速(每分鐘處理幾百萬任務(wù),通過使用RabbitMQ librabbitmq 和 一些優(yōu)化設(shè)置),它的每一部分都可以靈活地?cái)U(kuò)展(自定義的pool,序列化方式,壓縮,日志,周期任務(wù),消費(fèi)者,生產(chǎn)者),支持的消息隊(duì)列系統(tǒng)(redis rabbitmq),支持的結(jié)果存儲(chǔ)(django sqlalchemy redis amqp),并發(fā)支持(多進(jìn)程,eventlet gevent,單線程),序列化方式(json pickle yaml msgpack)。
自帶的監(jiān)控功能,工作流,資源泄露預(yù)防,處理速率、運(yùn)行時(shí)間控制
消息隊(duì)列rabbitmq 功能完整、穩(wěn)定、耐用、易安裝,作為生產(chǎn)環(huán)境很合適。
redis 也是功能完整的,但是丟失數(shù)據(jù)的可能性較高,如被停止或停電。
應(yīng)用需要一個(gè)celery實(shí)例,即應(yīng)用。這個(gè)應(yīng)用是使用所有東西的進(jìn)入點(diǎn),例如創(chuàng)建任務(wù)、管理工作進(jìn)程,必須可被其他模塊引入。
tasks.py
# coding: utf8 from celery import Celery app = Celery("tasks", broker="pyamqp://guest@localhost//") # 傳入的tasks參數(shù)即當(dāng)前的模塊名稱,broker即為消息隊(duì)列的地址 # ampb(RabbitMQ) redis # 下面創(chuàng)建任務(wù) @app.task def add(x, y): return x + y
執(zhí)行程序,啟動(dòng)服務(wù)器:
celery -A tasks worker --loglevel=info調(diào)用
from tasks import add add.delay(4, 4)
現(xiàn)在task是被之前啟動(dòng)的工作進(jìn)程來執(zhí)行,返回值是一個(gè)AsyncResult,可以用來判斷任務(wù)的狀態(tài)、等待該任務(wù)執(zhí)行完畢或是獲得它的返回值。默認(rèn)是不返回的,需要配置result backend,也可以在工作進(jìn)程的命令行輸出窗口中看到。
保存結(jié)果可以使用很多backend 例如Django的ORM、SQLAlchemy,Redis,RabbitMQ。
app = Celery("tasks", backend="rpc://", broker="pyamqp://") # 這邊使用的backend是RabbitMQ的rpc遠(yuǎn)程調(diào)用 result = add.delay(4, 4) # 現(xiàn)在就可以獲得返回的result了 result.ready() # 判斷任務(wù)是否執(zhí)行完成 result.get(timeout=1) # 等待任務(wù)執(zhí)行(一般不用) # 如果任務(wù)出錯(cuò)了這邊也會(huì)直接獲得異常 或: result.get(propagate=False) # 不拋出 result.traceback # 再獲得異常信息配置
app.conf.task_serializer = "json" # 設(shè)置task的序列化方式 # 一次設(shè)置很多選項(xiàng) app.conf.update( task_serializer="json", accept_content=["json"], result_serializer="json", )
使用配置模塊:
app.config_from_object("celeryconfig")
celeryconfig.py
broke_url = "pyamqp://" task_serializer = "json" task_serializer = "json" result_serializer = "json" accept_content = ["json"] timezone = "Europe/Oslo" enable_utc = True
如果想測試配置文件是否有語法問題,和普通的py文件一樣,使用:
python -m celeryconfig
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/38511.html
摘要:我們將窗口切換到的啟動(dòng)窗口,會(huì)看到多了兩條日志這說明任務(wù)已經(jīng)被調(diào)度并執(zhí)行成功。本文標(biāo)題為異步任務(wù)神器簡明筆記本文鏈接為參考資料使用之美分布式任務(wù)隊(duì)列的介紹思誠之道異步任務(wù)神器簡明筆記 Celery 在程序的運(yùn)行過程中,我們經(jīng)常會(huì)碰到一些耗時(shí)耗資源的操作,為了避免它們阻塞主程序的運(yùn)行,我們經(jīng)常會(huì)采用多線程或異步任務(wù)。比如,在 Web 開發(fā)中,對新用戶的注冊,我們通常會(huì)給他發(fā)一封激活郵件,...
摘要:所以這就現(xiàn)實(shí)了在中使用的應(yīng)用上下文。要引入請求上下文,需要考慮這兩個(gè)問題如何在中產(chǎn)生請求上下文。中有和可以產(chǎn)生請求上下文。具體的思路還是在中重載類,通過,在的上下文環(huán)境下執(zhí)行。將他們傳入,生成偽造的請求上下文可以覆蓋大多數(shù)的使用情況。 其實(shí)我只是想把郵件發(fā)送這個(gè)動(dòng)作移到Celery中執(zhí)行。既然用到了Celery,那么每次發(fā)郵件都單獨(dú)開一個(gè)線程似乎有點(diǎn)多余,異步任務(wù)還是交給Celery吧...
摘要:今天介紹一下如何在項(xiàng)目中使用搭建一個(gè)有兩個(gè)節(jié)點(diǎn)的任務(wù)隊(duì)列一個(gè)主節(jié)點(diǎn)一個(gè)子節(jié)點(diǎn)主節(jié)點(diǎn)發(fā)布任務(wù),子節(jié)點(diǎn)收到任務(wù)并執(zhí)行。 今天介紹一下如何在django項(xiàng)目中使用celery搭建一個(gè)有兩個(gè)節(jié)點(diǎn)的任務(wù)隊(duì)列(一個(gè)主節(jié)點(diǎn)一個(gè)子節(jié)點(diǎn);主節(jié)點(diǎn)發(fā)布任務(wù),子節(jié)點(diǎn)收到任務(wù)并執(zhí)行。搭建3個(gè)或者以上的節(jié)點(diǎn)就類似了),使用到了celery,rabbitmq。這里不會(huì)單獨(dú)介紹celery和rabbitmq中的知識(shí)了...
摘要:文檔中文文檔官方文檔定時(shí)服務(wù)與結(jié)合使用簡介是一個(gè)自帶電池的的任務(wù)隊(duì)列。追蹤任務(wù)在不同狀態(tài)間的遷移,并檢視返回值。 文檔 中文文檔 官方文檔 celery定時(shí)服務(wù)、celery與django結(jié)合使用 簡介 Celery 是一個(gè)自帶電池的的任務(wù)隊(duì)列。它易于使用,所以你可以無視其所解決問題的復(fù)雜程度而輕松入門。它遵照最佳實(shí)踐設(shè)計(jì),所以你的產(chǎn)品可以擴(kuò)展,或與其他語言集成,并且它自帶了在生產(chǎn)...
閱讀 2857·2023-04-25 18:58
閱讀 984·2021-11-25 09:43
閱讀 1219·2021-10-25 09:46
閱讀 3506·2021-09-09 11:40
閱讀 1707·2021-08-05 09:59
閱讀 878·2019-08-29 15:07
閱讀 965·2019-08-29 12:48
閱讀 707·2019-08-29 11:19