1.示例代码

import time
import threading v = threading.local() def func(arg):
# 内部会为当前线程创建一个空间用于存储:phone=自己的值
v.phone = arg
time.sleep(2)
print(v.phone,arg) # 去当前线程自己空间取值 for i in range(10):
t =threading.Thread(target=func,args=(i,))
t.start()

2.原理

import time
import threading DATA_DICT = {} def func(arg):
ident = threading.get_ident()
DATA_DICT[ident] = arg
time.sleep(1)
print(DATA_DICT[ident],arg) for i in range(10):
t =threading.Thread(target=func,args=(i,))
t.start()

3.拓展

import time
import threading INFO = {} class Local(object): def __getattr__(self, item):
ident = threading.get_ident()
return INFO[ident][item] def __setattr__(self, key, value):
ident = threading.get_ident()
if ident in INFO:
INFO[ident][key] = value
else:
INFO[ident] = {key: value} # 实例化
obj = Local() def func(arg):
# 调用对象的 __setattr__方法(“phone”,1)
obj.phone = arg
time.sleep(2)
print(obj.phone, arg) if __name__ == '__main__':
for i in range(10):
t = threading.Thread(target=func, args=(i,))
t.start()

总结:

1.obj.x 调用方法__getattr__

2.obj.x = 6 调用方法__setattr__

4.作用

内部自动为每个线程维护一个空间(字典),用于当前存取属于自己的值。保证线程之间的数据隔离。

{

线程ID: {...}

线程ID: {...}

线程ID: {...}

线程ID: {...}

}

多线程threading.local的作用及原理?的更多相关文章

  1. [Python 多线程] threading.local类 (六)

    在使用threading.local()之前,先了解一下局部变量和全局变量. 局部变量: import threading import time def worker(): x = 0 for i ...

  2. threading.local的作用?

    threading.local()这个方法的特点用来保存一个全局变量,但是这个全局变量只有在当前线程才能访问,如果你在开发多线程应用的时候  需要每个线程保存一个单独的数据供当前线程操作,可以考虑使用 ...

  3. threading.local作用及原理

    先看下应用: import threading from threading import local import time obj = local() def task(i): obj.xxxxx ...

  4. 多线程局部变量之threading.local()用法

    假如,开了十个线程并且做同样的一件事,他们需要带着自己的数据进来,完成事情后带着自己的数据出去.如果是并发,同时进来,他们的数据就会混乱. 一般情况,我们加锁就可以了,一个人先进来,先加锁,另一个人过 ...

  5. threading.local在flask中的用法

    一.介绍 threading.local的作用: 多个线程修改同一个数据,复制多份变量给每个线程用,为每个线程开辟一块空间进行数据的存储,而每块空间内的数据也不会错乱. 二.不使用threading. ...

  6. 网络编程 多线程/socketserver模块/ threading.local

    线程:进程中负责程序执行的执行单元. 多线程:在1个进程中存在多个线程. 进程只是用来把资源集中在一起,而线程才是cpu上的执行单位. 每个进程都会默认有一个控制线程也叫作主线程. 进程之间是竞争关系 ...

  7. threading.local()使用与原理剖析

    threading.local()使用与原理剖析 前言 还是第一次摘出某个方法来专门写一篇随笔,哈哈哈. 为什么要写这个方法呢?因为它确实太重要了,包括后期的Flask框架源码中都有它的影子. 那么我 ...

  8. 多线程多进程学习threading,queue线程安全队列,线程间数据状态读取。threading.local() threading.RLock()

    http://www.cnblogs.com/alex3714/articles/5230609.html python的多线程是通过上下文切换实现的,只能利用一核CPU,不适合CPU密集操作型任务, ...

  9. flask上下文管理相关 - threading.local 以及原理剖析

    threading.local 面向对象相关: setattr/getattr class Foo(object): pass obj = Foo() obj.x1 = 123 # object.__ ...

随机推荐

  1. 动态添加定时任务-quartz定时器

    Quartz动态添加.修改和删除定时任务 在项目中有一个需求,需要灵活配置调度任务时间,刚开始用的Java自带的java.util.Timer类,通过调度一个java.util.TimerTask任务 ...

  2. JAVA Socket 底层是怎样基于TCP/IP 实现的???

    首先必须明确:TCP/IP模型中有四层结构:       应用层(Application Layer).传输层(Transport  Layer).网络层(Internet Layer  ).链路层( ...

  3. iOS开发 -李洪强-清除缓存

    // //  SetViewController.m //  dfhx // //  Created by dfhx_iMac_001 on 16/4/5. //  Copyright © 2016年 ...

  4. HTTP Range header

    http://stackoverflow.com/questions/3303029/http-range-header *************************** 58 down vot ...

  5. Django Model之引用一个未定义的Model

    Django Model的外键自关联

  6. Entity简单使用

    urlEntity: //定义 package com.example.cc.ecustapp.Model; /** * Created by weijiawang on 2016/3/8. */pu ...

  7. Jquery学习笔记(2)--五角星评分

    网购五星评分模拟: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  8. CentOS 7 ifconfig: command not found

    # ifcon-bash: ifconfig: command not found谷歌了一下,整理了一下解决思路 查看ifconfig命令是否存在 查看 /sbin/ifconfig是否存在 如果if ...

  9. Java动态代理机制小结

    因为最近学习hadoop中用到了动态代理的相关知识,之前AOP编程也碰到过,所以在这里特地总结一下. 在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(In ...

  10. 【Mac + Python3.6 + ATX基于facebook-wda】之IOS自动化(三):facebook-wda库--API学习以及附录:Github上对WDA的问题解答

    下面简单介绍facebook-wda库--API的学习 import wda # debug模式,会在run运行时控制台生成消息 wda.DEBUG = False # False 关闭,True开启 ...