广告
返回顶部
首页 > 资讯 > 后端开发 > Python >深入理解python中的ThreadLocal
  • 350
分享到

深入理解python中的ThreadLocal

pythonThreadLocal 2023-03-08 08:03:39 350人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

ThreadLocal在threading模块中,可以见得它是为我们的线程服务的。 它的主要作用是存储当前线程的变量,各个线程之间的变量名是可以相同的,但是线程之间的变量是隔离的,也

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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 深入理解python中的ThreadLocal

本文链接: https://www.lsjlt.com/news/198950.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 深入理解python中的ThreadLocal
    ThreadLocal在threading模块中,可以见得它是为我们的线程服务的。 它的主要作用是存储当前线程的变量,各个线程之间的变量名是可以相同的,但是线程之间的变量是隔离的,也...
    99+
    2023-03-08
    python ThreadLocal
  • Android 中ThreadLocal的深入理解
    ThreadLocal前言:    ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”。其实,ThreadLocal并不是一个Thread,ThreadLocal是一个线程内部的数据存储类...
    99+
    2023-05-30
    android threadlocal roi
  • 怎么深入理解Python中的ThreadLocal变量
    怎么深入理解Python中的ThreadLocal变量,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在上篇我们看到了 ThreadLocal ...
    99+
    2022-10-19
  • 深入浅出解析Java ThreadLocal原理
    目录1.了解ThreadLocal简介使用2.源码解析 – 探究实现思路threadLocals变量与ThreadLocalMapset(T value) 方法get() 方法rem...
    99+
    2022-11-12
  • 深入理解Java并发编程之ThreadLocal
    目录ThreadLocal简介ThreadLocal源码解析实现原理ThreadLocalMap源码分析InheritableThreadLocal参考资料ThreadLocal简介...
    99+
    2022-11-13
    Java ThreadLocal
  • 深入理解Python中的__builti
    0.说明        这里的说明主要是以Python 2.7为例,因为在Python 3+中,__builtin__模块被命名为builtins,下面主要是探讨Python 2.x中__builtin__模块和__builtins__模块...
    99+
    2023-01-31
    Python __builti
  • 深入理解 Python yield
    yield的英文单词意思是生产,刚接触Python的时候感到非常困惑,一直没弄明白yield的用法。一直到稀里糊涂的看完了廖雪峰的python博客也没彻底明白。 有一次不小心看到了这个文章,是转载的,原文出自哪里我也不知道...
    99+
    2023-01-31
    Python yield
  • 深入理解python中的select模块
    简介 Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kq...
    99+
    2022-06-04
    模块 python select
  • 深入理解python中的atexit模块
    atexit 模块介绍 python atexit 模块定义了一个 register 函数,用于在 python 解释器中注册一个退出函数,这个函数在解释器正常终止时自动执行,一般用来做一些资源清理的操作...
    99+
    2022-06-04
    模块 python atexit
  • 深入理解Python中的super()方法
    前言 python的类分别有新式类和经典类,都支持多继承。在类的继承中,如果你想要重写父类的方法而不是覆盖的父类方法,这个时候我们可以使用super()方法来实现 python语言与C++有相似的类继承,在...
    99+
    2022-06-04
    方法 Python super
  • 怎么理解Python中的ThreadLocal变量
    这篇文章主要讲解了“怎么理解Python中的ThreadLocal变量”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Python中的ThreadLo...
    99+
    2022-10-19
  • 深入理解Python的元类
    目录什么是元类type元类动态创建类自定义元类总结什么是元类 Python中,一切皆对象,我们定义的数字、字符串、函数、列表等都是对象,对象是类(class)的是实例,而类(clas...
    99+
    2022-11-12
  • 深入理解python之一——python
    文章使用markdown写的,编辑的时候行间距还可以,显示的时候行间距好小,我也没办法。 首先,需要明白的是python是一种解释性语言标准,他可以由c、java或者其他语言来实现。在python的标准中,变量是链接式的。举个例子来说,内...
    99+
    2023-01-30
    python
  • 深入理解python中的浅拷贝和深拷贝
    在讲什么是深浅拷贝之前,我们先来看这样一个现象: a = ['scolia', 123, [], ] b = a[:] b[2].append(666) print a print b 为什么我只对...
    99+
    2022-06-04
    和深 python
  • 深入理解python协程
    目录一、什么是协程二、了解协程的过程2.1、yield工作原理2.2、预激协程的装饰器2.3、终止协程和异常处理2.4、让协程返回值2.5、yield from的使用2.6、yield from的意义三、greenl...
    99+
    2022-06-02
    python 协程
  • 深入理解Python中的内置常量
    前言 大家都知道Python内置的常量不多,只有6个,分别是True、False、None、NotImplemented、Ellipsis、__debug__。下面就来看看详细的介绍: 一. True ...
    99+
    2022-06-04
    常量 Python
  • 关于对python中self的深入理解
    假设有一个类nameMain(), 如最下面代码 类 : 一个抽象的模板。可以理解为抽象设计图类名:类的名字。查看/实现方式 :print(nameMain)或者print(self...
    99+
    2022-11-11
  • 深入理解最新Python中的Match Case
    有些人仍然认为 Python 不需要“switch-case”语法。 甚至 Guido 本人也不支持在 Python 中添加这种语法。但是,为什么它仍然在这个新版本中发布? 在我看来...
    99+
    2022-11-12
  • 深入理解Python对Json的解析
    Json简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - De...
    99+
    2022-06-04
    Python Json
  • 深入理解Python中__init__.py文件
    目录1. 简介1.1 模块(Module)和包(Package)的概念1.2 __init__.py文件简介2. __init__.py内容写法2.1 __init__.py文件内容...
    99+
    2023-02-09
    Python中__init__.py
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作