簡體   English   中英

flask_login,如何從新線程獲取current_user?

[英]flask_login, How to get current_user from a new thread?

我是flask_login庫的新手。 在我的代碼庫中,用戶登錄后,我可以從flask_login庫的current_user獲取當前用戶信息。 簡化的測試代碼如下:

from threading import Thread
from flask_login import current_user

def test():
    print("current_user = ", current_user)   # None
worker = Thread(target=test)
worker.start()
print("current_user = ", current_user)       #  <XXX.auth.view.User object at 0x119b2b250>

所以我很困惑,為什么我無法從單獨的線程獲取當前用戶信息,即使我在第一個print語句之前再次故意導入。

謝謝。

current_user是一個線程局部值 - 它將在每個線程中表現為一個單獨的變量。 如果您在其他地方需要它,您必須在線程之間傳遞它。

也許你的電話會變成:

from threading import Thread
from flask_login import current_user

user = current_user

def test(user):
    print("current_user = ", user)

worker = Thread(target=test, args=(user,))
worker.start()

print("current_user = ", user)

來自flask_login源的相關行:

current_user = LocalProxy(lambda: _get_user())

https://github.com/maxcountryman/flask-login/blob/d22f80d166ee260d44e0d2d9ea973b784ef3621b/flask_login/utils.py#L26


關於werkzeug從werkzeug文檔中實現本地人的相關討論:

Werkzeug提供了自己的本地數據存儲實現,稱為werkzeug.local。 此方法為線程本地提供了類似的功能,但也適用於greenlet。

https://werkzeug.palletsprojects.com/en/0.15.x/local/#werkzeug.local.LocalProxy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM