深入理解python中的ThreadLocal

 更新时间:2023年03月08日 08:30:58   作者:一根头发学一年  
本文主要介绍了深入理解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的文章就介绍到这了,更多相关python中的ThreadLocal内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SublimeText 2编译python出错的解决方法(The system cannot find the file specified)

    SublimeText 2编译python出错的解决方法(The system cannot find the file

    这篇文章主要介绍了SublimeText 2编译python报The system cannot find the file specified错误的解决方法,大家参考使用吧
    2013-11-11
  • Python导入模块时遇到的错误分析

    Python导入模块时遇到的错误分析

    这篇文章主要给大家详细解释了在Python处理导入模块的时候出现错误以及具体的情况分析,非常的详尽,有需要的小伙伴可以参考下
    2017-08-08
  • Django ORM 事务和查询优化的操作方法

    Django ORM 事务和查询优化的操作方法

    这篇文章主要介绍了Django ORM 事务和查询优化,包括事务操作、ORM 惰性查询及only与defer相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • python的setattr函数实例用法

    python的setattr函数实例用法

    在本篇文章里小编给大家整理了一篇关于python的setattr函数实例用法的相关知识点内容,有兴趣的朋友们学习下。
    2020-12-12
  • python保留两位小数的五种方法

    python保留两位小数的五种方法

    很多小伙伴在学习python的时候可能会遇到对数据进行格式化输出的需求,其中最常见的需求为:保留几位小数,今天小编就以python怎么保留两位小数为例,来介绍一下python数据格式化的方法,需要的朋友可以参考下
    2024-08-08
  • python数组排序方法之sort、sorted和argsort详解

    python数组排序方法之sort、sorted和argsort详解

    这篇文章主要给大家介绍了关于python数组排序方法之sort、sorted和argsort的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • PyCharm 在Windows的有用快捷键详解

    PyCharm 在Windows的有用快捷键详解

    这篇文章主要介绍了PyCharm 在Windows的有用快捷键,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • PyQt5 文本输入框自动补全QLineEdit的实现示例

    PyQt5 文本输入框自动补全QLineEdit的实现示例

    这篇文章主要介绍了PyQt5 文本输入框自动补全QLineEdit的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • 详解python持久化文件读写

    详解python持久化文件读写

    这篇文章主要介绍了python持久化文件读写,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • python如何将图片转换素描画

    python如何将图片转换素描画

    这篇文章主要介绍了python如何将图片转换素描画,帮助大家更好的用python处理图片,感兴趣的朋友可以了解下
    2020-09-09

最新评论