單獨(dú)運(yùn)行flask經(jīng)常死機(jī),安裝tornado,配合flask使用。
1.安裝tornado
pip install tornado
2.tornado+flask(http訪問(wèn))
2.1最簡(jiǎn)單的flask web應(yīng)用,hello.py代碼
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Test Hello World!'
if __name__ == '__main__':
app.run(host='0.0.0.0',port=5001)
2.2編輯tornado運(yùn)行程序,tornado_http_server.py代碼
對(duì)新手來(lái)說(shuō)需要注意的地方:
from hello import app,這里的hellp對(duì)應(yīng)上面的hello.py文件
端口用的是5001,與hello.py文件中的端口相同
from tornado.ioloop import IOLoop
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from hello import app
http_server=HTTPServer(WSGIContainer(app))
http_server.bind(5001,"0.0.0.0") # 端口必須與flask端口相同
http_server.start(1) # num_processes默認(rèn)值為1,即默認(rèn)僅開(kāi)啟一個(gè)進(jìn)程;如果<=0,則自動(dòng)根據(jù)機(jī)器硬件的cpu核芯數(shù)創(chuàng)建同等數(shù)目的子進(jìn)程;如果>0,則創(chuàng)建num_processes個(gè)子進(jìn)程。
IOLoop.instance().start()
2.3運(yùn)行tornado程序
運(yùn)行tornado_http_server.py,就不再需要運(yùn)行hello.py??梢岳斫馔ㄟ^(guò)tornado調(diào)用flask。
python tornado_http_server.py
2.4.訪問(wèn)測(cè)試
捕獲http.PNG
3.tornado+flask(https訪問(wèn))
前提條件,需要申請(qǐng)ssl證書(shū),申請(qǐng)成功會(huì)得到幾個(gè)證書(shū)相關(guān)文件,備用(拷貝到項(xiàng)目目錄)。
3.1準(zhǔn)備好flask web應(yīng)用文件
app366.py
# 以上代碼省略
......
if __name__ == '__main__':
app.run(host='0.0.0.0',port=5000)
3.2編輯tornado運(yùn)行程序,tornado_https_server.py代碼
監(jiān)聽(tīng)443端口,即https訪問(wèn)使用的默認(rèn)端口
應(yīng)用綁定的端口是5000,與上面app366.py文件中的端口相同
certfile對(duì)應(yīng)的是ssl證書(shū),keyfile對(duì)應(yīng)密鑰
import os.path
from tornado.httpserver import HTTPServer
from tornado.wsgi import WSGIContainer
from tornado import ioloop
from app366 import app
def main():
application = HTTPServer(WSGIContainer(app)) # 文件中的app函數(shù)或變量
server = HTTPServer(application, ssl_options={
"certfile": os.path.join(os.path.abspath("."), "www.kwaili.com_bundle.crt"),
"keyfile": os.path.join(os.path.abspath("."), "www.kwaili.com.key")
})
application.bind(5000, "0.0.0.0") # 設(shè)置對(duì)外開(kāi)啟訪問(wèn),端口設(shè)置為5000,與app366中設(shè)置的端口相同
server.listen(443)
ioloop.IOLoop.instance().start()
if __name__ == "__main__":
main()
3.3運(yùn)行tornado程序
運(yùn)行tornado_https_server.py,就不再需要運(yùn)行app366.py??梢岳斫馔ㄟ^(guò)tornado調(diào)用flask。
python tornado_https_server.py
3.4.訪問(wèn)測(cè)試
捕獲https.PNG
tornado配置https訪問(wèn)搞了好久,如果覺(jué)得對(duì)你有用,點(diǎn)個(gè)贊,謝謝!