国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Flask在Windows環(huán)境下的部署

魏憲會(huì) / 2864人閱讀

摘要:實(shí)際上還是單進(jìn)程阻塞運(yùn)行的,即使在中配置了也無法實(shí)現(xiàn)多線程使用。多線程情況配置啟用多線程在中配置兩條測(cè)試路由先用瀏覽器訪問隨即立刻訪問可見兩次訪問是不同的線程處理的,不會(huì)出現(xiàn)堵塞的情況。

背景

由于目前在用的Flask項(xiàng)目涉及到一部分依賴Windows的處理,還無法遷移到linux平臺(tái),那么在windows環(huán)境下,要怎么部署呢?

思路

根據(jù)Flask官網(wǎng)介紹,由于Flask內(nèi)置的服務(wù)器性能不佳,推薦的主要的部署方式有如下幾種:

mod_wsgi (Apache)

獨(dú)立 WSGI 容器

Gunicorn

Tornado

Gevent

uWSGI

FastCGI

CGI

上述這些部署方式,僅Tornado是支持在windows情況下部署的,配合上Nginx可以達(dá)到比較好的效果。可已參考Nginx與tornado框架的并發(fā)評(píng)測(cè)。

但是在實(shí)際使用中發(fā)現(xiàn),tornado 的穩(wěn)定性雖然很高,但是在tornado上部署Flask,并不會(huì)有異步的效果。實(shí)際上還是單進(jìn)程阻塞運(yùn)行的,即使在Flask中配置了threaded = True也無法實(shí)現(xiàn)多線程使用。

Flask多線程情況

配置啟用多線程:

# manage.py
from flask_script import Server

server = Server(host="0.0.0.0", threaded=True)

Flask中配置兩條測(cè)試路由

import time
@main.route("/test")
def maintest():
    return "hello world"
    
@main.route("/sleep")
def mainsleep():
    time.sleep(60)
    return "wake up"

先用瀏覽器訪問sleep

隨即立刻訪問 est:

可見兩次訪問是不同的線程處理的,不會(huì)出現(xiàn)堵塞的情況。

tornado + Flask多線程情況

使用tornado托管:

from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from yourapplication import app

http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5000)
IOLoop.instance().start()

先用瀏覽器訪問sleep

隨即立刻訪問 est:

可以發(fā)現(xiàn),雖然tornado框架是支持異步的,但是由于實(shí)際上后臺(tái)的處理是同步的,從而無法實(shí)現(xiàn)異步的處理的效果。如果想后臺(tái)的處理也異步,則需要直接使用tornado來開發(fā)。

那么為什么使用tornado來托管flask呢?

Tornado 是一個(gè)開源的可伸縮的、非阻塞式的 web 服務(wù)器和工具集,它驅(qū)動(dòng)了FriendFeed 。因?yàn)樗褂昧?epoll 模型且是非阻塞的,它可以處理數(shù)以千計(jì)的并發(fā)固定連接,這意味著它對(duì)實(shí)時(shí) web 服務(wù)是理想的。把 Flask 集成這個(gè)服務(wù)是直截了當(dāng)?shù)?/pre>

根據(jù)官網(wǎng)描述,其實(shí)也是為了彌足flask自帶服務(wù)器不穩(wěn)定的問題。

Flask高并發(fā)下的表現(xiàn)

使用tsung進(jìn)行壓測(cè),壓力500:

Name highest 10sec mean lowest 10sec mean Highest Rate Mean Rate Mean Count
connect 34.30 msec 31.91 msec 506 / sec 356.60 / sec 33.19 msec 103908
page 0.42 sec 0.29 sec 505 / sec 356.32 / sec 0.39 sec 103782
request 0.42 sec 0.29 sec 505 / sec 356.32 / sec 0.39 sec 103782
session 1mn 24sec 10.64 sec 11.4 / sec 1.21 / sec 14.24 sec 362
Code Highest Rate Mean Rate Total number
200 505 / sec 356.32 / sec 104792
Name Highest Rate Total number
error_abort 0.5 / sec 1
error_abort_max_conn_retries 11.7 / sec 362
error_connect_econnrefused 58.6 / sec 1667

可見,在500的并發(fā)下,效果不佳,有很多的鏈接拒絕。

Flask + Nginx在高并發(fā)下的表現(xiàn)

使用tsung進(jìn)行壓測(cè),壓力500:

Name highest 10sec mean lowest 10sec mean Highest Rate Mean Rate Mean Count
connect 0.20 sec 30.95 msec 1810.5 / sec 626.43 / sec 0.11 sec 189853
page 0.68 sec 0.17 sec 1810.1 / sec 625.72 / sec 0.40 sec 189581
request 0.68 sec 0.17 sec 1810.1 / sec 625.72 / sec 0.40 sec 189581
Code Highest Rate Mean Rate Total number
200 906.4 / sec 196.08 / sec 60689
502 1443.9 / sec 430.02 / sec 129006
Name Highest Rate Total number
error_abort 0.5 / sec 1

情況差不多,Flask服務(wù)器表現(xiàn)還算穩(wěn)定,那么嘗試增加后臺(tái)Flask服務(wù)器數(shù)量(通過多端口實(shí)現(xiàn)):

python manage.py runserver --port=8001
python manage.py runserver --port=8002
python manage.py runserver --port=8003
python manage.py runserver --port=8004

使用tsung進(jìn)行壓測(cè),壓力500,4個(gè)Flask服務(wù)器:

Name highest 10sec mean lowest 10sec mean Highest Rate Mean Rate Mean Count
connect 0.18 sec 32.57 msec 3510.1 / sec 639.92 / sec 0.11 sec 195154
page 0.49 sec 85.30 msec 3512.1 / sec 639.07 / sec 0.35 sec 194856
request 0.49 sec 85.30 msec 3512.1 / sec 639.07 / sec 0.35 sec 194856
Code Highest Rate Mean Rate Total number
200 3510.1 / sec 639.50 / sec 194986
Name Highest Rate Total number
error_abort 0.333333333333333 / sec 1

這個(gè)效果妥妥的。

使用tsung進(jìn)行壓測(cè),壓力1000,4個(gè)Flask服務(wù)器:

Name highest 10sec mean lowest 10sec mean Highest Rate Mean Rate Mean Count
connect 0.20 sec 32.63 msec 2983.8 / sec 492.94 / sec 98.56 msec 150793
page 0.57 sec 90.00 msec 2976.4 / sec 491.31 / sec 0.40 sec 150275
request 0.57 sec 90.00 msec 2976.4 / sec 491.31 / sec 0.40 sec 150275
Code Highest Rate Mean Rate Total number
200 2981.4 / sec 488.92 / sec 149556
502 92.5 / sec 4.02 / sec 925
Name Highest Rate Total number
error_abort 0.333333333333333 / sec 1

開始有一些502的超時(shí)錯(cuò)誤了。

使用tsung進(jìn)行壓測(cè),壓力1000,4個(gè)tornado服務(wù)器:

Name highest 10sec mean lowest 10sec mean Highest Rate Mean Rate Mean Count
connect 0.18 sec 86.24 msec 2052.1 / sec 693.82 / sec 0.14 sec 208786
page 0.52 sec 0.24 sec 2060.7 / sec 693.34 / sec 0.45 sec 208606
request 0.52 sec 0.24 sec 2060.7 / sec 693.34 / sec 0.45 sec 208606
Code Highest Rate Mean Rate Total number
200 2056.6 / sec 693.67 / sec 208703

在并發(fā)1000的情況下,是否使用tornado托管Flask效果差不多。

結(jié)論

根據(jù)上述測(cè)試,直接使用Flask服務(wù)器的話,由于并發(fā)處理較弱,會(huì)有各種超時(shí)或者連接拒絕的錯(cuò)誤。通過搭配Nginx來進(jìn)行緩沖,通過增加后端服務(wù)器數(shù)來提供并發(fā)處理量。

所以最終選擇了Nginx+后臺(tái)4個(gè)Flask服務(wù)器的方式。由于目前Flask項(xiàng)目全體用戶只有幾千,目前并發(fā)情況很低,該方式完全滿足使用。

如果在更大型項(xiàng)目中,并發(fā)上萬,建議還是考慮想辦法遷移至Liunx環(huán)境,通過官方建議的方式部署。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/40310.html

相關(guān)文章

  • FlaskWindows環(huán)境下的部署

    摘要:實(shí)際上還是單進(jìn)程阻塞運(yùn)行的,即使在中配置了也無法實(shí)現(xiàn)多線程使用。多線程情況配置啟用多線程在中配置兩條測(cè)試路由先用瀏覽器訪問隨即立刻訪問可見兩次訪問是不同的線程處理的,不會(huì)出現(xiàn)堵塞的情況。 背景 由于目前在用的Flask項(xiàng)目涉及到一部分依賴Windows的處理,還無法遷移到linux平臺(tái),那么在windows環(huán)境下,要怎么部署呢? 思路 根據(jù)Flask官網(wǎng)介紹,由于Flask內(nèi)置的服務(wù)器...

    ermaoL 評(píng)論0 收藏0
  • Windows平臺(tái)使用IIS部署Flask網(wǎng)站

    摘要:在平臺(tái)部署基于的網(wǎng)站是一件非常折騰的事情,平臺(tái)下有很多選擇,本文記錄了部署到的主要步驟,希望對(duì)你有所幫助。下載后運(yùn)行,搜索,分別安裝。使用命令可以將其移除。在中你可以使用來快捷開發(fā)并部署程序,真正讓你一鍵無憂。 在 Windows 平臺(tái)部署基于 Python 的網(wǎng)站是一件非常折騰的事情,Linux/Unix 平臺(tái)下有很多選擇,本文記錄了 Flask 部署到 IIS 的主要步驟,希望對(duì)你...

    2bdenny 評(píng)論0 收藏0
  • 初見Flask

    摘要:接收用戶請(qǐng)求并分析請(qǐng)求的。執(zhí)行函數(shù)并生成響應(yīng),返回給瀏覽器。這個(gè)過程我們稱為注冊(cè)路由,路由負(fù)責(zé)管理和函數(shù)之間的映射,而這個(gè)函數(shù)則被稱為視圖函數(shù)。文件是一個(gè)名為的文本文件,它存儲(chǔ)了項(xiàng)目中提交時(shí)的忽略文件規(guī)則清單。 flask簡(jiǎn)述 Flask 是一個(gè)基于 Python 開發(fā)并且依賴 jinja2 模板和 Werkzeug WSGI 服務(wù)的一個(gè)微型框架,對(duì)于 Werkzeug 本質(zhì)是 Soc...

    tomorrowwu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

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