threading.local()的实例化机制

news/2025/11/15 19:08:53/文章来源:https://www.cnblogs.com/eliwang/p/19226069

threading.local() 的实例化机制

  • threading.local() 是全局实例化一次的:

    • 它在模块/类/函数级别(通常在 __init__ 或全局作用域)创建一个单一的 local 对象实例(类型为 _thread._local)。

    • 这个对象本身是共享的(所有线程看到同一个 ID),但内部实现了一个线程本地存储(TLS)代理:当每个线程首次访问它时,会动态为该线程创建一个独立的“本地字典”(基于线程 ID 隔离),后续访问复用这个本地字典。

  • 示例

    #! /usr/bin/env python
    # -*- coding: utf-8 -*-import time
    import threading
    import concurrent.futureslocal_storage = threading.local()  # 全局实例化,然后每个线程中使用或存储时,使用的是线程键def task_local(task_id):thread = threading.current_thread()if not hasattr(local_storage, 'counter_local'):local_storage.counter_local = 0print(f"{thread.name}  新线程:counter_local 初始化为 0")else:local_storage.counter_local += 1print(f"{thread.name}  复用线程:counter_local 现在是 {local_storage.counter_local}")time.sleep(0.1)return f"local 方法 - 任务 {task_id} 完成,counter_local={local_storage.counter_local}"with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:futures_local = [executor.submit(task_local, i) for i in range(4)]for future in concurrent.futures.as_completed(futures_local):print(future.result())
  • 输出

    ThreadPoolExecutor-0_0  新线程:counter_local 初始化为 0
    ThreadPoolExecutor-0_1  新线程:counter_local 初始化为 0
    ThreadPoolExecutor-0_0  复用线程:counter_local 现在是 1
    ThreadPoolExecutor-0_1  复用线程:counter_local 现在是 1
    local 方法 - 任务 0 完成,counter_local=0
    local 方法 - 任务 1 完成,counter_local=0
    local 方法 - 任务 3 完成,counter_local=1
    local 方法 - 任务 2 完成,counter_local=1

     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/966455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tarjan复建

塔尖踏践他荐太监肽键抬肩台站太真。写在前面: 我 \(C_aO\) 了全™的忘干净了于是步了鱼鱼的后尘开始切黄绿DP绿蓝 \(Tarjan\) 。 哎呀呀反正肝硬化不受人待见没人看就随便写写了。强连通分量: 这个没忘干净,当年为…

采用git进行项目管理

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Golang游戏开发笔记:地图索引系统实现

好家伙, 在游戏开发,尤其是后端服务的构建过程中,我们常常从一个简单的想法或原型开始。 代码直接、功能明确,一切看起来都很好。但随着项目复杂度的提升,最初的“简洁”设计往往会变成“僵化”的枷锁。0.需求分析…

20251115

依旧平凡的日常生活

网络爬虫:简单静/动态网页

爬虫实验*2 反思总结爬虫实验 实验一:静态网页 what to show? 实验一总流程 第一步:终端下载爬虫三件套第二步:创建文件。因为已经下载了vscode,这里用code进入,python运行。猜猜爬的是什么?第三步:爬虫中impo…

20232307 2024-2025-1 《网络与系统攻防技术》实验五实验报告

20232307 2024-2025-1 《网络与系统攻防技术》实验五实验报告 1. 实验内容 本周学习内容: 信息搜集:通过各种方式获取目标主机或网络的信息,属于攻击前的准备阶段 网络踩点:Google Hacking技术、Web信息搜集与挖掘…

EXECUTE IMMEDIATE语句分析

在 Oracle 的 PL/SQL 环境中,EXECUTE IMMEDIATE 通常需要包裹在 BEGIN...END 块中执行,因为它是 PL/SQL 的语法元素,不能直接在 SQL 命令行中单独执行(除非使用特定工具的简化模式)。 具体说明:在 PL/SQL 程序中…

产品更新与重构策略:创新与稳定的平衡之道 - 详解

产品更新与重构策略:创新与稳定的平衡之道 - 详解2025-11-15 18:47 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displ…

MySQL MVCC实现原理

一、概述 1.1 MVCC的定义与价值 MVCC(Multi-Version Concurrency Control)是一种非锁定式并发控制技术,其核心目标是解决读写操作的相互阻塞问题。传统锁机制中,读操作加共享锁、写操作加排他锁,导致读写互斥;而…

算法第三次作业

算法第三次作业 1、按照动态规划法的求解步骤分析作业题目“数字三角形”: 1.1 根据最优子结构性质,列出递归方程式,说明方程式的定义、边界条件 a.递归方程式:c[j]=a[i][j]+max(c[j],c[j+1]) b.方程式的定义:数字…

完整教程:《简易制作 Linux Shell:详细分析原理、设计与实践》

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

计算机网络5 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年境外商务出差保险哪里有卖:TOP10平台专业解析

2025年境外商务出差保险哪里有卖:TOP10平台专业解析在当今全球化的商业环境中,境外商务出差已成为众多企业和商务人士的常态。然而,对于有境外商务出差需求的人来说,面临着诸多难题。“选品难(产品繁杂无从下手)…

2025年开除申诉靠谱机构推荐:专业学术申诉机构评测指南!

2025年开除申诉靠谱机构推荐:专业学术申诉机构评测指南!留学途中遭遇学术紧急情况?面临开除、停学或学术不端听证会,一家靠谱的申诉支持机构至关重要。本文基于教育部涉外监管认证信息、机构服务响应速度、申诉成功…

Day39(9)F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project01\jdbc-demo+springboot-web-quickstart

DQL条件查询-- =================== DQL: 条件查询 ====================== -- 1. 查询 姓名 为 柴进 的员工 select * from emp where name = 柴进;-- 2. 查询 薪资小于等于5000 的员工信息 select * from emp where…

# Android Compose 实现 左滑删除

Android Compose 实现 左滑删除Android Compose 实现 左滑删除 直接看源码 private enum class CardState {Collapsed /* 收缩 */, Expanded /* 展开的 */ // 哈哈哈,还能学点英文 (: } @Composable private fun Pers…

win10pro sn

win10pro snVK7JG-NPHTM-C97JM-9MPGT-3V66T

完整教程:PMBT2222A,215 开关晶体管功率二极管 NXP安世半导体 音频放大电路 LED驱动 应用

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

用递归的方式输出各位数字

include <stdio.h> include <stdlib.h> void f(int n){ if(n<10){ printf("%d ",n); return; }//输出到最后一位 else{int r=0;int x=n;int k=0;//n是k位数while(x!=0){r=x%10;x=x/10;k++;}i…

WebServer类 - 指南

WebServer类 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "C…