• [Python]`threading.local`创建线程本地数据


    在Python中,threading.local是一个用于创建线程本地数据的工具。它允许每个线程拥有自己独立的变量副本,这样可以在多线程程序中避免共享变量带来的问题。

    通过使用threading.local,你可以为每个线程创建一个独立的变量空间,这样每个线程对该变量的访问都不会影响其他线程对同一变量的访问。这在多线程环境中非常有用,特别是当你需要在每个线程中保持独立的状态时。

    一个常见的例子是在Web应用程序中使用threading.local来跟踪每个请求的上下文信息,比如用户身份验证信息。

    以下是一个简单的示例,使用threading.local来存储用户身份验证信息:

    import threading
    from flask import Flask, request
    
    # 创建一个 ThreadLocal 对象来存储用户身份验证信息
    local_data = threading.local()
    
    app = Flask(__name__)
    
    def get_current_user():
        # 获取当前线程的用户身份验证信息
        return getattr(local_data, 'user', None)
    
    @app.route('/')
    def index():
        user = get_current_user()
        if user:
            return f"Hello, {user}!"
        else:
            return "Hello, guest!"
    
    @app.route('/login')
    def login():
        # 模拟用户登录,并将用户信息存储在当前线程的 local_data 中
        user = request.args.get('user')
        local_data.user = user
        return f"Logged in as {user}"
    
    if __name__ == '__main__':
        app.run()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    在这个示例中,我们创建了一个简单的Flask应用程序,其中定义了两个路由:/用于显示当前用户信息,/login用于模拟用户登录并存储用户信息。通过使用threading.local,我们可以确保每个线程中的用户信息是独立的,不会被其他线程共享,从而实现了在Web应用程序中跟踪用户上下文信息的需求。

  • 相关阅读:
    努力打卡 每天学习 不浪费每一天 Day43
    rust编程-rust所有权理解(chapter 4.1)
    OpenGL ES /Metal滤镜处理
    架构中的“大象”
    NoSQL redis 过期key处理
    面试官:我们深入聊聊Java虚拟机吧
    如何使用 Javascript 将图标字体渲染为图片
    Nacos安装教程
    CSS - 鼠标移入整行高亮显示,适用于会员套餐各参数对比页面(display: table,div 转表格形式)
    STM32环境搭建+创建工程
  • 原文地址:https://blog.csdn.net/qq_44810930/article/details/136628258