1.python之threading.local

  • 当每个线程在执行 val.num=1 ,在内部会为此线程开辟一个空间,来存储 num=1

  • val.num,找到此线程自己的内存地址去取自己存储 num

import time
import threading val1 = threading.local() def task(i):
val.num = i
time.sleep(1)
print(val.num) for i in range(4):
t = threading.Thread(target=task,args=(i,))
t.start()

2. 线程唯一标识

get_ident

import threading
from threading import get_ident def task():
ident = get_ident()
print(ident)
for i in range(20):
t = threading.Thread(target=task)
t.start()

3. 自定义threading.local

储存结构:

storage = {
1112:{'x1':1}
1113:{'x1':2}
1114:{'x1':3}
1115:{'x1':4}
}

import threading
class Local(object):
def __init__(self):
object.__setattr__(self,'storage',{}) def __setattr__(self, key, value):
ident = threading.get_ident()
if ident in self.storage:
self.storage[ident][key] = value
else:
self.storage[ident] = {key:value} def __getattr__(self, item):
ident = threading.get_ident()
if ident not in self.storage:
return
return self.storage[ident].get(item) local = Local() def task(arg):
local.x1 = arg
print(local.x1) for i in range(5):
t = threading.Thread(target=task,args=(i,))
t.start()

4. 加强版threading.local

储存结构:

storage = {
1111:{'x1':[]},
1112:{'x1':[]}
1113:{'x1':[]}
1114:{'x1':[]}
1115:{'x1':[]},
1116:{'x1':[]}
}

import threading
class Local(object):
def __init__(self):
object.__setattr__(self,'storage',{}) def __setattr__(self, key, value):
ident = threading.get_ident()
if ident in self.storage:
self.storage[ident][key].append(value)
else:
self.storage[ident] = {key:[value,]} def __getattr__(self, item):
ident = threading.get_ident()
if ident not in self.storage:
return
return self.storage[ident][item][-1] local = Local() def task(arg):
local.x1 = arg
print(local.x1) for i in range(5):
t = threading.Thread(target=task,args=(i,))
t.start()

最新文章

  1. 文件上传&文件下载
  2. 显示SQL Server分配的全部内存
  3. Entity Framework Fluent API
  4. 转:ASP.NET MVC扩展之HtmlHelper辅助方法
  5. 2016/7/30 div位置设置,表格大小统一
  6. 增加mvc:resources后访问不了注解配置的controller的问题
  7. android查看真机中的数据库
  8. 【转】 NSString / NSMutableString 字符串处理,常用代码 (实例)
  9. 京东UED招聘web前端开发工程师(中/高级)
  10. cookie 处理 以及模拟登陆
  11. Python selectors实现socket并发
  12. eureka分区的深入讲解
  13. npm install 报错Unexpected end of JSON input while parsing near...
  14. PyQt样式表设置QComboBox
  15. C++ AfxBeginThread的介绍/基本用法
  16. iOS 将Excel导入到SQLite3的过程
  17. Dungeon Game (GRAPH - DP)
  18. PHP 生成16 uuid
  19. 谈一谈PHP计划任务
  20. Intellij IDEA 2017 通过scala工程运行wordcount

热门文章

  1. 使用Docker搭建Nextcloud SSL站点
  2. ping外网:unknown host www.baidu.comc排查
  3. 最后一面挂在volatile关键字上,面试官:重新学学Java吧!
  4. FastStone+ImageReady+Kutools plus导入图片到Excel单元格
  5. xdoj 2020校赛复盘
  6. c++ UDP套接字服务器端代码示范
  7. cb06a_c++_顺序容器的定义
  8. vulstack红队评估(四)
  9. 项目实战:Qt手机模拟器拉伸旋转框架
  10. android 6.0 权限设置详解