鍍金池/ 問(wèn)答/Python  Linux  網(wǎng)絡(luò)安全/ flask項(xiàng)目部署中,使用nginx+gunicorn 部署應(yīng)用和最普通的 ap

flask項(xiàng)目部署中,使用nginx+gunicorn 部署應(yīng)用和最普通的 app.run() 有什么區(qū)別?

最近剛學(xué)習(xí) flask,看很多人在服務(wù)器上部署 flask 應(yīng)用都是使用 nginx + gunicorn,一直都想知道這樣和開發(fā)環(huán)境下的 python xx.py 去運(yùn)行應(yīng)用有什么區(qū)別?有哪些優(yōu)勢(shì)?

回答
編輯回答
骨殘心

app.run()
它是調(diào)用flask內(nèi)置的自己實(shí)現(xiàn)的一個(gè)單線程服務(wù)器,通常是用在開發(fā)測(cè)試的情況下,因?yàn)檎鎸?shí)情況下必須考慮到并發(fā),nginx + gunicorn,是利用nginx高并發(fā)的優(yōu)勢(shì),nginx收到http請(qǐng)求之后,把他轉(zhuǎn)發(fā)給wsgi服務(wù)器gunicorn,gunicorn上運(yùn)行flask應(yīng)用,處理請(qǐng)求之后再返回給nginx

下面這段是flask run函數(shù)的源碼,你可以找來(lái)看看

from werkzeug.serving import run_simple

try:
    run_simple(host, port, self, **options)
finally:
    # reset the first request information if the development server
    # reset normally.  This makes it possible to restart the server
    # without reloader and that stuff from an interactive shell.
    self._got_first_request = False
2018年2月4日 14:34
編輯回答
維他命

nginx一般是用來(lái)反向代理用的,還能處理靜態(tài)文件、ip控制等,是比較專業(yè)并且高性能的web服務(wù)器

gunicorn一般用來(lái)nohup、多進(jìn)程和日志

當(dāng)然用flask直接裸跑也可以,但是這樣很多輪子就要自己實(shí)現(xiàn)了。

最好還是加一層nginx,起碼可以緩沖http請(qǐng)求,python本身應(yīng)該有很多包也可以支持相應(yīng)功能,不過(guò)有沒(méi)人人維護(hù)這些東西,就不知道了,不建議用。我也沒(méi)聽說(shuō)過(guò),基本百度不到這些包的文檔。

將來(lái)業(yè)務(wù)起來(lái)了,如果需要水平拓展,flask裸跑會(huì)帶來(lái)很多麻煩。

2018年8月30日 02:05
編輯回答
我以為

python xx.py 是單線程的。

2017年10月17日 14:24