成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

celery 使用

GraphQuery / 2647人閱讀

摘要:使用消息來通信,流程為客戶端添加消息到隊(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

相關(guān)文章

  • 異步任務(wù)神器 Celery 簡明筆記

    摘要:我們將窗口切換到的啟動(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ā)一封激活郵件,...

    Ryan_Li 評論0 收藏0
  • Celery使用Flask的上下文

    摘要:所以這就現(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吧...

    Sourcelink 評論0 收藏0
  • django開發(fā)-使用celery搭建分布式(多節(jié)點(diǎn))任務(wù)隊(duì)列

    摘要:今天介紹一下如何在項(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í)了...

    ConardLi 評論0 收藏0
  • Celery任務(wù)隊(duì)列

    摘要:文檔中文文檔官方文檔定時(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)...

    Lorry_Lu 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<