温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python中ThreadLocal的作用是什么

发布时间:2023-03-08 09:49:22 来源:亿速云 阅读:132 作者:iii 栏目:开发技术

这篇文章主要介绍“python中ThreadLocal的作用是什么”,在日常操作中,相信很多人在python中ThreadLocal的作用是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python中ThreadLocal的作用是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

ThreadLocal在threading模块中,可以见得它是为我们的线程服务的。

它的主要作用是存储当前线程的变量,各个线程之间的变量名是可以相同的,但是线程之间的变量是隔离的,也就是每个线程有自己的变量副本,互不干扰。

ThreadLocal为每个线程提供 get() 或 set() 方法来创建独立初始化的变量副本。

ThreadLocal的工作原理可以理解为:ThreadLocal变量相当于一个字典,字典的第一个key是线程id,每个线程的变量存储到自己id的字典里,结构可以想象成如下:

local = {
    131443: {  # 线程id
        "name": "线程1",  # 线程变量
        "age": 10,  # 线程变量
        "status": 1  # 线程变量
    }
}

看下面一个例子:

import threading

local = threading.local()


def func():
    print(f"id:{local.id},name:{local.name},num:{local.num}")


def run(num):
    local.id = threading.current_thread().ident
    local.name = threading.current_thread().name
    local.num = num
    func()


if __name__ == "__main__":
    t1 = threading.Thread(target=run, args=(1,))
    t2 = threading.Thread(target=run, args=(2,))

    t1.start()
    t2.start()
    t1.join()
    t2.join()

执行结果如下:

id:13022343168,name:Thread-1,num:1
id:13039132672,name:Thread-2,num:2

可以看到,在线程里,我们可以直接使用local点来获取各自的变量,每个线程的变量是隔离的。

那么ThreadLocal有什么用呢?

  • 线程间的数据隔离

  • 进行事务操作,存储线程事务信息

  • 数据库连接、Session会话管理

  • 在进行对象跨层传递时,打破层次间的约束

例如Flask中请求上下文对象,就是对ThreadLocal进一步封装,它能够存储每个请求的请求参数和其他变量,各请求线程之间数据隔离。

到此,关于“python中ThreadLocal的作用是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI