flask並發是如何區分用戶的?

可以不是flask,應用伺服器是如果在並發請求下,區分用戶的唯一性。

舉個例子,如果用戶綁定郵箱,我可以發送一個jwt,裡面信息大致類似{"uid":123,"email":"fff@qq.com"},那麼三個用戶同時綁定時,同時發送三封郵件,正巧,三個用戶同時點擊驗證鏈接,到flask這層,我會

data= 驗證token(鏈接地址中的token)

uid=data.get("uid")

enail=data.get("email")

current_user.uid ==uid ,表示是這個用戶,我就將這個用戶的email寫至資料庫,那麼串列來講很容易理解,三個用戶同時點擊驗證時flask如何處理的呢?


1. 你的 current_user_id 應該是根據此次請求的上下文拿到的(比如從 URL 或者 session 中拿),每個請求對應的是不同的 request 上下文

2. 雖然 request 是用 from flask import request 得到的,看起來是共同的一個全局變數,但實際上 flask 用了一個叫 thread local 的方法保證 request 是線程安全的(http://flask.pocoo.org/docs/0.12/quickstart/#accessing-request-data)。也就是說,即使在並發場景下,每個人拿到的 request 也是不一樣的,處理起來和串列沒什麼區別。


這個問題是這樣的,沒有理解錯的話,你是發郵件到用戶的郵箱,讓用戶點擊一個你發的url。

用戶點擊後,update 資料庫,激活用戶賬戶。

1、三個用戶同時點擊驗證時,用戶(註冊的email)不同,點擊的是不同的url,所以flask該怎麼處理就怎麼處理。

2、並發是下面的組合支持的。(其中方法之一)

Nginx + Gunicorn(with gevent) + Flask


每次處理請求時的上下文是獨立的,此時current_user、uid、email之類的變數在每個請求之間都是不同的,互不干擾的,因而每次請求對應不同的用戶,因而每個請求會更新對應用戶的數據。


推薦閱讀:

ImagePy開發文檔 —— 管理器
Python 在 Linux 系統運維中都有哪些應用?
敲敲級簡單的鑒別H圖片的小程序
Python 連接 MySQL 的幾種姿勢
2017,再來聊一聊Python,未來發展怎樣?

TAG:Web開發 | Python | Flask |