乙個最簡單的基於flask的web應用:
flask版本為0.1
from flask import flask
defhello_world
():return
'hello world!'
if __name__ == '__main__':
下面分析一下執行run()函式背後的細節:
flask 的run方法如下:
defflask類的run方法呼叫werkzeug中的run_******方法,預設情況下訪問的是本機的5000埠。run(self, host='localhost', port=5000, **options):
# ......
from werkzeug import run_******
# ......
return run_******(host, port, self, **options)
def
run_******
extra_files=none, threaded=false, processes=1):
definner
(): processes)
try:
srv.serve_forever()
except keyboardinterrupt:
pass
if use_reloader:
#---
else:
inner()
use_reloader預設為false,呼叫內部的inner函式。
inner函式有兩個功能:
1.呼叫make_server函式
def
make_server
threaded=false, processes=1):
# ....
else:
handler = baserequesthandler
server = wsgiserver
srv = server((host, port), handler)
return srv
這裡使用預設的引數,指定handler和server的具體型別。
server是繫結的wsgiserver。handler繫結的是baserequesthandler,檢視werkzeug.serving原始碼可以看到:
baserequesthandler =wsgirequesthandler,
而wsgirequesthandler是實現了wsgi**的request handler
make_server的任務是返回乙個wsgiserver伺服器例項。
wsgiserver是一種實現了wsgi協議的basehttpserver,其繼承自httpserver.
這裡依賴的是wsgiref包。
2.執行serve_forever方法,一直監聽來自客戶端的請求
wsgiserver的serve_forever實際是呼叫其父類class baseserver的方法:
def
serve_forever
(self, poll_interval=0.5):
"""handle one request at a time until shutdown."""
# 處理客戶端的請求,直到服務關閉
self.__is_shut_down.clear()
try:
while
not self.__shutdown_request:
r, w, e = _eintr_retry(
select.select, [self], , ,
poll_interval)
if self in r:
self._handle_request_noblock()
self.service_actions()
finally:
self.__shutdown_request = false
self.__is_shut_down.set()
經過上面的分析,畫出整個run函式背後的流程圖如下:
IBM Storwize V7000背後的秘密
10月22日,ibm新一代中端儲存系統storwize v7000亮相西安。據ibm儲存系統全球市場與銷售副總裁dan galvan介紹,ibm storwize v7000的最大優點是能夠簡化儲存設定與管理,節省大量的儲存機架空間,並且整合了一套先進的儲存效率軟體,可以讓中端儲存使用者充分享受智慧...
QtConcurrent系列之run函式建立多執行緒
在qt多執行緒程式設計中,我們一般使用qthread,qrunnable等類來實現多執行緒。除此之外,qt還提供了乙個更高階的實現多執行緒的方式,那就是qtconcurrent框架,qtconcurrent框架中提供了許多高階的,效能更好的多執行緒api函式,這些函式非常方便使用。本文重點介紹qtc...
Flask之鉤子函式
1 before first request deffirst request print first time request 2 before request 使用較多 defbefore request ifnothasattr g,glo1 setattr g,glo1 想要設定的 deft...