[Python]threading local 线程局部变量小测试
来源:互联网 发布:扫描系统漏洞软件 编辑:程序博客网 时间:2024/05/17 04:08
概念
有个概念叫做线程局部变量,一般我们对多线程中的全局变量都会加锁处理,这种变量是共享变量,每个线程都可以读写变量,为了保持同步我们会做枷锁处理。但是有些变量初始化以后,我们只想让他们在每个线程中一直存在,相当于一个线程内的共享变量,线程之间又是隔离的。python threading模块中就提供了这么一个类,叫做local。
多线程中共享变量和局部变量的区别我画两个小图,简单描述下(作图能力一般,请见谅,概念性的东西大家可以google下,很多好文章)
全局变量
线程局部变量
对比:
下面是3个小例子,分别是使用local局部变量, 全局变量, gevent中的local来看线程对变量的操作是否隔离。
#!/usr/bin/python# -*- coding: utf-8 -*-# python2.7x# author: orangelliu# date: 2014-08-20'''线程本地变量 初始值定义之后,在线程中可以保持隔离性为了做对比,分别和全局变量,gevent线程对比线程局部变量'''from time import sleepfrom random import randomfrom threading import Thread, localdata = local()def bar(): print 'called from %s'%data.vdef foo(): data.v = str(data.v) + '.......' bar()class T(Thread): def run(self): sleep(random()) data.v = self.getName() sleep(1) foo()T().start()T().start()
执行结果:
called from Thread-1.......
called from Thread-2.......
[Finished in 1.6s]
可以看到每个v只在自己的线程中操作。
#!/usr/bin/python# -*- coding: utf-8 -*-# python2.7x# author: orangelliu# date: 2014-08-20'''线程本地变量 初始值定义之后,在线程中可以保持隔离性为了做对比,分别和全局变量,gevent线程对比全局变量'''from time import sleepfrom random import randomfrom threading import Thread, local#如果使用全局变量呢def bar1(): global v print 'calledddddd from %s'%vdef foo1(): global v v = v + '.....' bar1()class T1(Thread): def run(self): global v sleep(random()) v =self.getName() sleep(1) foo1()T1().start()T1().start()
执行结果:
calledddddd from Thread-1.....
calledddddd from Thread-1..........
[Finished in 1.8s
可以看到v值在被2个线程都操作了,最后线程2只是作了一个 再拼字符串的过程,因为线程1已经创建了全局变量v
#!/usr/bin/python# -*- coding: utf-8 -*-# python2.7x# author: orangelliu# date: 2014-08-20'''线程本地变量 初始值定义之后,在线程中可以保持隔离性为了做对比,分别和全局变量,gevent线程对比gevent 协程'''import geventfrom gevent.local import localdata = local()def bar(): print 'called from %s'%data.vdef foo(v): data.v = v data.v = str(data.v) + '.......' bar()g1 = gevent.spawn(foo, '1')g2 = gevent.spawn(foo, '2')gevent.joinall([g1, g2])
called from 1.......
called from 2.......
[Finished in 0.1s]
类似线程的结果。
本文出自 “orangleliu笔记本” 博客,请务必保留此出处http://blog.csdn.net/orangleliu/article/details/38741275
2 1
- [Python]threading local 线程局部变量小测试
- [Python]threading local 线程局部变量小测试
- [Python]threading local 线程局部变量
- [Python]threading local 线程局部变量
- 线程局部变量(thread-local variable)
- thread local variable(线程局部变量)
- 什么是线程局部变量(Thread Local Variable)
- Thread-Local Variables线程局部变量
- Python 线程,独立的线程空间(threading.local())
- 局部变量线程安全测试
- Python中threading.local方法
- 4.2线程局部变量(Thread-Local Variables)
- Python线程池(threading)
- threading.local
- Python线程之threading.Event
- 【python学习笔记】线程Threading
- python Threading线程关键点
- java学习——ThreadLocal 线程局部 (thread-local) 变量的使用
- ZooKeeper 节点类型
- TCO14 2C L2: CliqueGraph,graph theory, clique
- 各种内部排序方法的比较和选择
- 为什么Hadoop是分布式计算的未来
- HDOJ 题目2553 N皇后问题(dfs)
- [Python]threading local 线程局部变量小测试
- 使用直流稳压电源有哪些注意事项
- 面向对象Object.equals.instanceof解析java
- hdu 1272小希的迷宫
- c# List 与 Comparer
- LeetCode | Simplify Path
- 一个有故事的TextSwitcher
- Lession 25 纯虚函数、抽象类
- 让我提高最快的方法是抄写英语文章