当前位置: 首页 > news >正文

threading.local()的实例化机制

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.jsqmd.com/news/41254/

相关文章:

  • Tarjan复建
  • 采用git进行项目管理
  • Golang游戏开发笔记:地图索引系统实现
  • 20251115
  • 网络爬虫:简单静/动态网页
  • 20232307 2024-2025-1 《网络与系统攻防技术》实验五实验报告
  • EXECUTE IMMEDIATE语句分析
  • 产品更新与重构策略:创新与稳定的平衡之道 - 详解
  • MySQL MVCC实现原理
  • 算法第三次作业
  • 算法第三次作业
  • 完整教程:《简易制作 Linux Shell:详细分析原理、设计与实践》
  • 计算机网络5 - 指南
  • 2025年境外商务出差保险哪里有卖:TOP10平台专业解析
  • 2025年开除申诉靠谱机构推荐:专业学术申诉机构评测指南!
  • Day39(9)F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project01\jdbc-demo+springboot-web-quickstart
  • # Android Compose 实现 左滑删除
  • win10pro sn
  • 完整教程:PMBT2222A,215 开关晶体管功率二极管 NXP安世半导体 音频放大电路 LED驱动 应用
  • EFCore中巧妙利用ToQueryString()实现批插(不借助第三方包)
  • 2025 年 11 月门窗十大品牌综合实力权威推荐榜单,产能、专利、环保三维数据透视
  • 20232426 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • Springboot启动时记录进程ID
  • 019数据结构之栈——算法备赛 - 实践
  • 详细介绍:【Linux】07.Ubuntu开发环境部署
  • GESP考试报名附考试报名流程
  • 2025 最新电缆品牌权威推荐:耐火 / 阻燃 / 智能 / 光伏等全品类优质厂商榜单,附国际认证测评
  • 2025 最新电缆制造厂家推荐!电缆品牌权威榜单发布,耐火 / 智能 / 特种电缆优选企业全解析
  • 2025年Dynamics 365 CRM的工作行情如何?
  • iHaier2.0 智能协同办公模块(Doc-Collab)实现实用的方案详解