当前位置: 首页 > 面试题库 >

Python中的“线程本地存储”是什么,为什么需要它?

柴凌
2023-03-14
问题内容

特别是在Python中,如何在线程之间共享变量

尽管我threading.Thread以前从未使用过,但从未真正理解或看到过如何共享变量的示例。它们是在主线程和子线程之间共享还是仅在子线程之间共享?我何时需要使用线程本地存储来避免这种共享?

我已经看到许多有关通过使用锁在线程之间同步对共享数据的访问的警告,但是我还没有看到这个问题的一个很好的例子。

提前致谢!


问题答案:

在Python中,所有内容都是共享的,但函数局部变量除外(因为每个函数调用都有自己的局部变量集,而线程始终是单独的函数调用。)即使如此,也只有变量本身(引用对象的名称)对于该功能而言是本地的;对象本身始终是全局的,任何事物都可以引用它们。Thread在这方面,特定线程的对象不是特殊对象。如果将Thread对象存储在所有线程都可以访问的位置(例如全局变量),则所有线程都可以访问该Thread对象。如果要原子地修改另一个线程可以访问的
任何内容 ,则必须使用锁来保护它。当然,所有线程都必须共享此相同的锁,否则效果不佳。

如果您需要实际的线程本地存储,那就是其中的地方threading.localthreading.local线程之间不共享属性。每个线程仅看到其自身放置在其中的属性。如果您对它的实现感到好奇,请在标准库的_threading_local.py中找到源。



 类似资料:
  • 问题内容: 我真的不明白为什么在核心类型链接中会在属性描述中说(例如,对于一个数字): store-设置为yes,将实际字段存储在索引中,否,则不存储它。默认为no(请注意, JSON文档本身已存储,可以从中检索 ) index-如果不应为该值建立索引,则设置为no。在这种情况下,应该将store设置为yes,因为如果未对它进行索引和存储, 则与它无关 这两个大胆的部分似乎矛盾。如果我仍然可以从源

  • 问题内容: 这个问题使我想知道Java和.NET等高级开发框架中的线程本地存储。 Java有一个类(也许还有其他结构),而.NET有数据插槽,很快就有了自己的类。(它也具有,但我对成员数据的线程本地存储特别感兴趣。)大多数其他现代开发环境都在语言或框架级别为其提供了一种或多种机制。 线程本地存储解决了哪些问题,或者与创建独立对象实例以包含线程本地数据的标准的面向对象的习语相比,线程本地存储提供了哪

  • 问题内容: 我从节点启动这是来自node.js README.md 先决条件(仅Unix): 想知道为什么node.js需要Python?它是否在其API下使用Python 问题答案: Node.js使用GYP构建-GYP —用Python编写的跨平台构建工具。Python中还实现了其他一些构建步骤。因此,从源代码构建节点需要Python。 但是您还需要Python来构建本机插件。

  • 本文向大家介绍本地存储的生命周期是什么?相关面试题,主要包含被问及本地存储的生命周期是什么?时的应答技巧和注意事项,需要的朋友参考一下 : 和 都能控制数据的存储时间。 是一个绝对的过期时间, 是文档被访问之后的存活时间(是相对时间)。默认是 。 : 当会话被关闭后(浏览器、标签页被关闭),就会被清除。与 用法一样。 : 除非被主动清除,不然永久储存在浏览器中。 : 没有过期时间,除非主动清除。

  • 问题内容: 如何在Python中使用线程本地存储? 有关 Python中的“线程本地存储”是什么,为什么需要它?-共享变量时,该线程似乎更加关注。 问题答案: 例如,如果您有一个线程工作池,并且每个线程都需要访问其自己的资源(例如网络或数据库连接),则线程本地存储很有用。请注意,该模块使用常规的线程概念(可以访问进程全局数据),但是由于全局解释器锁定,它们并不是太有用。不同的模块会为每个模块创建一

  • 我已经读了很多关于内存对齐的书,但我不明白,我知道这是一种重要的方法,要编写高效的代码,你必须牢记这一点。但我感到困惑。