日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Celery 使用(一)

發(fā)布時間:2025/3/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Celery 使用(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Celery 使用(一)

架構(gòu)

  • Producer:任務(wù)發(fā)布者;
  • Celery Beat:任務(wù)調(diào)度器,Beat進程會讀取配置文件中的內(nèi)容,周期性的將配置中到期需要執(zhí)行的任務(wù)發(fā)送給任務(wù)隊列;
  • Broker:消息代理,接受生產(chǎn)者的任務(wù)消息,存進隊列后發(fā)送給消費者;
  • Celery Worker:執(zhí)行任務(wù)的消費者;
  • Result Backend:保存消費者執(zhí)行任務(wù)完后的結(jié)果;
  • 如下圖:

    整體的流程,任務(wù)發(fā)布者或者是任務(wù)調(diào)度,將任務(wù)發(fā)送到消息代理中,接著消息代理將任務(wù)發(fā)送給消費者來執(zhí)行,其執(zhí)行完后將結(jié)果保存到backend中。

    使用

    先創(chuàng)建Celery實例和相關(guān)的任務(wù),這里配置Celery可以通過創(chuàng)建一個配置文件,然后通過app.config_from_object('proj.celeryconfig')加載即可。

    task.py如下

    from celery import Celery app = Celery('tasks', backend='amqp', broker='amqp://guest@localhost:5672//') @app.task def add(x, y):return x + y

    接下來,創(chuàng)建相關(guān)的任務(wù)發(fā)布者,run_task.py如下

    from task2 import add result = add.delay(1,1) import time while not result.ready():print('not yet ready')time.sleep(1) print(result.get())

    然后在項目目錄中,通過命令執(zhí)行Celery,命令如下:

    celery -A task2.app worker --loglevel=info

    如果看到命令行里顯示該實例的所有任務(wù)說明執(zhí)行成功,最后再開一個進程執(zhí)行任務(wù),接著就會看到命令行中的提示信息,說明消費者執(zhí)行成功,并且將結(jié)果保存到backend中。

    一個簡單的用例就結(jié)束了。

    疑惑

    之前有一個疑惑的點在于,既然RabbitMQ可以實現(xiàn)任務(wù)隊列,要Celery有何用呢?

    從我搜索到的知識來看,有以下幾點:

  • Celery可以支持多種消息代理,不僅僅是RabbitMQ,還有Redis、MongoDB等等;
  • RabbitMQ是消息隊列,其可以應(yīng)用到各種場景中,包括任務(wù)分發(fā)系統(tǒng),也就是需要自己實現(xiàn)一個Celery,而Celery本身就是一個任務(wù)分發(fā)系統(tǒng),顯然簡化了代碼,不需要重復(fù)造輪子;
  • 轉(zhuǎn)載于:https://www.cnblogs.com/George1994/p/7385335.html

    總結(jié)

    以上是生活随笔為你收集整理的Celery 使用(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。