標籤:綁定 設定 協程 sgi func val print 基於 cto
Flask session,request,current_app的傳遞
1 flask的 request, session 和 current_app 都是 設定方式比較新穎 -- 通過上下文管理的方式實現的
每次請求進來app.run調用 call 方法, 建立 一個本地線程(唯一標識作為鍵) -- 然後把執行個體化的對象push到一個地方,在請求結束後返回的時候 pop 掉local = { '標識':{'stack':[RequestContext(),]} }
2 補充 partial 函數
其實就是函數調用的時候,有多個參數 參數,但是其中的一個參數已經知道了,我們可以通過這個參數重新綁定一個新的函數,然後去調用這個新函數。from functools import partialdef f(a,b): return a + bf1 = partial(f,10)print(f1(5))-->> 15
3 唯一標識
theading_local -->> 每一個線程 建立一個from greenlet import getcurrent as get_ident可以基於 greenlet -->> 粒度更細 比如 wsgi -- 有基於線程的,也有基於協程實現的本地線程: import threading local_values = threading.local() def func(num): local_values.name = num import time time.sleep(1) print(local_values.name, threading.current_thread().name) for i in range(20): th = threading.Thread(target=func, args=(i,), name='線程%s' % i) th.start()
Flask 上下文管理-- (session,request,current_app的傳遞)