狗书第二章笔记
?
線程是可單獨(dú)管理的最小指令集。進(jìn)程經(jīng)常使用多個活動線程,有時還會共享內(nèi)存或文件句柄等資源。多線程 Web 服務(wù)器會創(chuàng)建一個線程池,再從線程池中選擇一個線程用于處理接收到的請求。
?
在 Flask 中有兩種上下文:程序上下文和請求上下文。下面的表 2-1 列出了這兩種上下文提供的變量。
| 變量名 | 上下文 | 說 明 ? |
| current_app | 程序上下文 | 當(dāng)前激活程序的程序?qū)嵗?/td> |
| g | 程序上下文 | 處理請求時用作臨時存儲的對象。每次請求都會重設(shè)這個變量 |
| request | 請求上下文 | 請求對象,封裝了客戶端發(fā)出的 HTTP 請求中的內(nèi)容 |
| session | 請求上下文 | 用戶會話,用于存儲請求之間需要“記住”的值的詞典 |
?
Flask 在分發(fā)請求之前激活(或推送)程序和請求上下文,請求處理完成后再將其刪除。程序上下文被推送后,就可以在線程中使用 current_app 和 g 變量。類似地,請求上下文被推送后,就可以使用 request 和 session 變量。如果使用這些變量時我們沒有激活程序上下文或請求上下文,就會導(dǎo)致錯誤。
?
?
2.5.3 請求鉤子
? before_first_request:注冊一個函數(shù),在處理第一個請求之前運(yùn)行。
? before_request:注冊一個函數(shù),在每次請求之前運(yùn)行。
? after_request:注冊一個函數(shù),如果沒有未處理的異常拋出,在每次請求之后運(yùn)行。
? teardown_request:注冊一個函數(shù),即使有未處理的異常拋出,也在每次請求之后運(yùn)行。
在請求鉤子函數(shù)和視圖函數(shù)之間共享數(shù)據(jù)一般使用上下文全局變量 g。例如,before_
request 處理程序可以從數(shù)據(jù)庫中加載已登錄用戶,并將其保存到 g.user 中。隨后調(diào)用視
圖函數(shù)時,視圖函數(shù)再使用 g.user 獲取用戶。
總結(jié)
- 上一篇: 获取png格式的MNIST数据集
- 下一篇: nginx: [error] inval