欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python celery原理及運(yùn)行流程解析

 更新時(shí)間:2020年06月13日 10:10:52   作者:_夕顏  
這篇文章主要介紹了Python celery原理及運(yùn)行流程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

celery簡(jiǎn)介

celery是一個(gè)基于分布式消息傳輸?shù)漠惒饺蝿?wù)隊(duì)列,它專注于實(shí)時(shí)處理,同時(shí)也支持任務(wù)調(diào)度。它的執(zhí)行單元為任務(wù)(task),利用多線程,如Eventletgevent等,它們能被并發(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)圖如下:

組件介紹:

  • Producer:調(diào)用了Celery提供的API、函數(shù)或者裝飾器而產(chǎn)生任務(wù)并交給任務(wù)隊(duì)列處理的都是任務(wù)生產(chǎn)者。
  • Celery Beat:任務(wù)調(diào)度器,Beat進(jìn)程會(huì)讀取配置文件的內(nèi)容,周期性地將配置中到期需要執(zhí)行的任務(wù)發(fā)送給任務(wù)隊(duì)列。
  • Broker:消息代理,又稱消息中間件,接受任務(wù)生產(chǎn)者發(fā)送過(guò)來(lái)的任務(wù)消息,存進(jìn)隊(duì)列再按序分發(fā)給任務(wù)消費(fèi)方(通常是消息隊(duì)列或者數(shù)據(jù)庫(kù))。Celery目前支持RabbitMQ、Redis、MongoDB、Beanstalk、SQLAlchemy、Zookeeper等作為消息代理,但適用于生產(chǎn)環(huán)境的只有RabbitMQ和Redis, 官方推薦 RabbitMQ。
  • Celery Worker:執(zhí)行任務(wù)的消費(fèi)者,通常會(huì)在多臺(tái)服務(wù)器運(yùn)行多個(gè)消費(fèi)者來(lái)提高執(zhí)行效率。
  • Result Backend:任務(wù)處理完后保存狀態(tài)信息和結(jié)果,以供查詢。Celery默認(rèn)已支持Redis、RabbitMQ、MongoDB、Django ORM、SQLAlchemy等方式。

工作原理

它的基本工作就是管理分配任務(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è)程序:

  • "from celery import Celery"是導(dǎo)入celery中的Celery類。celery_app
  • celery_app是Celery類的實(shí)例。
  • 把Celery配置存放進(jìn)project/config.py文件,使用celery_app.config_from_object加載配置。
  • 將任務(wù)注冊(cè)到應(yīng)用中

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)容類型

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é)果如下:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python getopt模塊使用實(shí)例解析

    python getopt模塊使用實(shí)例解析

    這篇文章主要介紹了python getopt模塊使用實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • wxpython中Textctrl回車事件無(wú)效的解決方法

    wxpython中Textctrl回車事件無(wú)效的解決方法

    這篇文章主要介紹了wxpython中Textctrl回車事件無(wú)效的解決方法,較為詳細(xì)的分析了TextCtrl支持的事件類型,并給出了TextCtrl綁定回車事件的相應(yīng)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-07-07
  • 在python里協(xié)程使用同步鎖Lock的實(shí)例

    在python里協(xié)程使用同步鎖Lock的實(shí)例

    今天小編就為大家分享一篇在python里協(xié)程使用同步鎖Lock的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • python?通過(guò)dict(zip)和{}的方式構(gòu)造字典的方法

    python?通過(guò)dict(zip)和{}的方式構(gòu)造字典的方法

    在python中,通常通過(guò)dict和zip組合來(lái)構(gòu)建鍵值對(duì),這篇文章主要介紹了python?通過(guò)dict(zip)和{}的方式構(gòu)造字典的方法,需要的朋友可以參考下
    2022-07-07
  • Python?nonlocal關(guān)鍵字?與?global?關(guān)鍵字解析

    Python?nonlocal關(guān)鍵字?與?global?關(guān)鍵字解析

    這篇文章主要介紹了Python?nonlocal關(guān)鍵字?與?global?關(guān)鍵字解析,nonlocal關(guān)鍵字用來(lái)在函數(shù)或其他作用域中使用外層變量,global關(guān)鍵字用來(lái)在函數(shù)或其他局部作用域中使用全局變量,更多香瓜內(nèi)容需要的小伙伴可以參考一下
    2022-03-03
  • 簡(jiǎn)單了解Django ContentType內(nèi)置組件

    簡(jiǎn)單了解Django ContentType內(nèi)置組件

    這篇文章主要介紹了簡(jiǎn)單了解Django ContentType內(nèi)置組件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python中引用傳參四種方式介紹

    Python中引用傳參四種方式介紹

    大家好,本篇文章主要講的是Python中引用傳參四種方式介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2021-12-12
  • Python多模塊引用由此引發(fā)的相對(duì)路徑混亂問(wèn)題

    Python多模塊引用由此引發(fā)的相對(duì)路徑混亂問(wèn)題

    這篇文章主要介紹了Python多模塊引用由此引發(fā)的相對(duì)路徑混亂問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • DjangoRestFramework 使用 simpleJWT 登陸認(rèn)證完整記錄

    DjangoRestFramework 使用 simpleJWT 登陸認(rèn)證完整記錄

    Djangorestframework-simplejwt是Django REST Framework框架的一個(gè)jwt插件,使用 python http 工具進(jìn)行接口測(cè)試的方法文中給大家提到,重點(diǎn)給大家分享djangorestframework-simplejwt 使用記錄及登陸認(rèn)證的完成過(guò)程,感興趣的朋友跟隨小編一起看看吧
    2021-06-06
  • Python中利用pyqt5制作指針鐘表顯示實(shí)時(shí)時(shí)間(指針時(shí)鐘)

    Python中利用pyqt5制作指針鐘表顯示實(shí)時(shí)時(shí)間(指針時(shí)鐘)

    這篇文章主要介紹了Python中利用pyqt5制作指針鐘表顯示實(shí)時(shí)時(shí)間(動(dòng)態(tài)指針時(shí)鐘),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02

最新評(píng)論