我是flask_login 库的新手。在我的代码库,用户登录后,我可以从当前用户的信息current_user
的flask_login
库。简化的测试代码如下:
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())
来自werkzeug docs的werkzeug对本地人的实现的相关讨论:
Werkzeug 提供了自己的本地数据存储实现,称为 werkzeug.local。这种方法为线程局部变量提供了类似的功能,但也适用于 greenlets。
https://werkzeug.palletsprojects.com/en/0.15.x/local/#werkzeug.local.LocalProxy
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句