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

資訊專欄INFORMATION COLUMN

Sanic教程:配置

binta / 1471人閱讀

摘要:單一配置擼起袖子,開始吧,新建文件夾,內(nèi)部建立這樣的文件結(jié)構(gòu)其中內(nèi)容如下代碼示例中開啟了模式,假設(shè)我們需要通過配置文件來實(shí)現(xiàn)控制服務(wù)的模式開啟與否,那該怎么實(shí)現(xiàn)呢。

配置

對于一個項(xiàng)目來說,配置是一個很嚴(yán)肅的問題,比如說:在開發(fā)環(huán)境和生產(chǎn)環(huán)境中,配置是不同的,那么一個項(xiàng)目該如何自由地在不同的配置環(huán)境中進(jìn)行切換呢,思考下,然后帶著答案或者疑問往下閱讀。

單一配置

擼起袖子,開始吧,新建文件夾 demo2 ,內(nèi)部建立這樣的文件結(jié)構(gòu):

demo02
├── config
│?? ├── __init__.py
│?? └── config.py
└── run.py

其中 run.py 內(nèi)容如下:

#!/usr/bin/env python
from sanic import Sanic
from sanic.response import text

app = Sanic()


@app.route("/")
async def test(request):
    return text("Hello World!")


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000, debug=True)

代碼示例中開啟了 debug 模式,假設(shè)我們需要通過 config.py 配置文件來實(shí)現(xiàn)控制服務(wù)的 debug 模式開啟與否,那該怎么實(shí)現(xiàn)呢。

config.py 中添加一行:DEBUG=True ,然后 run.py 內(nèi)容改為:

#!/usr/bin/env python
from sanic import Sanic
from sanic.response import text
from config import DEBUG

app = Sanic()


@app.route("/")
async def test(request):
    return text("Hello World!")


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000, debug=DEBUG)

表面上看,功能確實(shí)實(shí)現(xiàn)了,但這實(shí)際上卻不是很好的做法,若部署在生產(chǎn)環(huán)境中,難道還要特地再將 debug 改為 False 么,這顯然很浪費(fèi)時間,如果需要改變的參數(shù)有很多,那就很難維護(hù)了。

多配置

那么,正確的做法應(yīng)該是怎么樣的呢?

我們應(yīng)當(dāng)依據(jù)不同的環(huán)境來編寫各自對應(yīng)的環(huán)境,舉個例子,比如生產(chǎn)環(huán)境就對應(yīng)pro_config,開發(fā)環(huán)境就對應(yīng)dev_config.py等等

具體該怎么實(shí)施?首先在文件夾 demo2 ,內(nèi)部建立這樣的文件結(jié)構(gòu):

demo02
├── config
│?? ├── __init__.py
│?? ├── config.py
│?? ├── dev_config.py
│?? └── pro_config.py
└── run.py

然后使用類繼承的方式使這三個配置文件聯(lián)系起來,比如在 config.py 中就只放公有配置,如:

#!/usr/bin/env python
import os


class Config():
    """
    Basic config for demo02
    """
    # Application config
    TIMEZONE = "Asia/Shanghai"
    BASE_DIR = os.path.dirname(os.path.dirname(__file__))

而在 pro_config.py或dev_config.py 中就可以自由地編寫不同的配置了:

# dev_config
#!/usr/bin/env python
from .config import Config


class DevConfig(Config):
    """
    Dev config for demo02
    """

    # Application config
    DEBUG = True

# pro_config
#!/usr/bin/env python
from .config import Config


class ProConfig(Config):
    """
    Pro config for demo02
    """

    # Application config
    DEBUG = False

配置文件還需要根據(jù)系統(tǒng)環(huán)境變量的設(shè)置進(jìn)行不同配置環(huán)境的切換,比如設(shè)置 MODE 系統(tǒng)環(huán)境變量,這里從系統(tǒng)環(huán)境變量得到配置也是個不錯的方法,一般說利用gunicorn配置worker數(shù)目之類的,都可以使用這種方案。

然后可以根據(jù)其不同的值切換到不同的配置文件,因此在 __init__.py 中需要這么寫:

#!/usr/bin/env python
import os


def load_config():
    """
    Load a config class
    """

    mode = os.environ.get("MODE", "DEV")
    try:
        if mode == "PRO":
            from .pro_config import ProConfig
            return ProConfig
        elif mode == "DEV":
            from .dev_config import DevConfig
            return DevConfig
        else:
            from .dev_config import DevConfig
            return DevConfig
    except ImportError:
        from .config import Config
        return Config


CONFIG = load_config()

默認(rèn) MODE 設(shè)置為 DEV,在 run.py 文件中就可以這么調(diào)用:

#!/usr/bin/env python
from sanic import Sanic
from sanic.response import text
from config import CONFIG

app = Sanic()
app.config.from_object(CONFIG)

@app.route("/")
async def test(request):
    return text("Hello World!")


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000, debug=app.config["DEBUG"])

而在生產(chǎn)環(huán)境的服務(wù)器上,直接通過設(shè)置系統(tǒng)變量就可以達(dá)到配置修改的目的了,如下:

# 通過設(shè)置MODE的值進(jìn)行配置文件的選擇
export MODE=PRO 

若是利用 supervisor 來啟動服務(wù),可通過添加environment = MODE="PRO" 來設(shè)置環(huán)境變量,是不是很方便呢。

說明

其實(shí)我編寫這種微服務(wù),配置更新是很正常且很頻繁的需求,這樣的話我就必須要求我的代碼可以實(shí)現(xiàn)熱更新,也就是可以迅速的修改配置,且迅速的生效,目前我使用的是ZooKeeper來實(shí)現(xiàn)這個需求,有興趣的朋友可以詳細(xì)了解,或許你也是用這個方案呢?

如果你有更好的方案,不妨告知一二。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42409.html

相關(guān)文章

  • Sanic教程:快速開始

    摘要:快速開始在安裝之前在支持異步的過程中,都經(jīng)歷了哪些比較重大的更新。踏出第一步我們將正式使用來構(gòu)建一個項(xiàng)目,讓我們踏出第一步,利用來編寫一個返回字符串的服務(wù)程序。本次示例的源代碼全部在上,見。 快速開始 在安裝Sanic之前,讓我們一起來看看Python在支持異步的過程中,都經(jīng)歷了哪些比較重大的更新。 首先是Python3.4版本引入了asyncio,這讓Python有了支持異步IO的標(biāo)...

    warmcheng 評論0 收藏0
  • 基于python3.5+的web框架sanic中文入門教程

    摘要:簡介是一款用寫的,用法和類似,的特點(diǎn)是非常快官網(wǎng)速度比較框架實(shí)現(xiàn)基礎(chǔ)每秒請求數(shù)平均時間安裝環(huán)境創(chuàng)建文件,寫入下面的內(nèi)容運(yùn)行是不是看起來和一樣屬性上傳文件列表數(shù)據(jù)數(shù)據(jù)表單數(shù)據(jù)例子路由和差不多,一看就懂注冊中間件異常處 簡介 sanic是一款用python3.5+寫的web framework,用法和flask類似,sanic的特點(diǎn)是非??靏ithub官網(wǎng):https://github.c...

    booster 評論0 收藏0
  • python 最快 web 框架 Sanci 快速入門

    摘要:詳細(xì)信息可以看下這個問題先在說下我的部署方式使用部署配置文件啟動方式總結(jié)試用了下,把之前的一個聊天機(jī)器人從改成了。預(yù)告下一篇將介紹如何使用一步一步創(chuàng)建一個聊天機(jī)器人。 簡介 Sanic 是一個和類Flask 的基于Python3.5+的web框架,它編寫的代碼速度特別快。除了像Flask 以外,Sanic 還支持以異步請求的方式處理請求。這意味著你可以使用新的 async/await ...

    snifes 評論0 收藏0
  • sanic異步框架之中文文檔

    摘要:實(shí)例實(shí)例測試結(jié)果增加路由實(shí)例測試結(jié)果提供了一個方法,根據(jù)處理程序方法名生成。異常拋出異常要拋出異常,只需從異常模塊中提出相應(yīng)的異常。 typora-copy-images-to: ipic [TOC] 快速開始 在安裝Sanic之前,讓我們一起來看看Python在支持異步的過程中,都經(jīng)歷了哪些比較重大的更新。 首先是Python3.4版本引入了asyncio,這讓Python有了支...

    elliott_hu 評論0 收藏0
  • Sanic + 前端MVVM 一種新一代Python高性能全棧開發(fā)實(shí)踐

    摘要:前端一種新一代高性能全棧開發(fā)實(shí)踐背景本項(xiàng)目將使用配合最簡單的邏輯來展示一個基于的全新一代高性能全棧開發(fā)實(shí)踐的為什么是對于為何不是等著名框架,或許可能很多人會產(chǎn)生疑惑,本身和非常的相似,而它的出現(xiàn),不僅是大大改進(jìn)過去時代性能低下通病,外加配 SanicCRUD-vue Sanic + 前端MVVM 一種新一代Python高性能全棧開發(fā)實(shí)踐showImg(https://segmentfa...

    Profeel 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<