Learning Python(17)--多线程编程之线程的局部变量
2016-03-21 16:56
656 查看
上一节介绍了多线程间的共享问题。本节介绍,使用threading模块的ThreadLocal来创建一个全局变量,每个线程可以为这个变量绑定只属于自己的局部属性。
全局变量local_school就是一个ThreadLocal对象,每个Thread对它都可以读写student属性,但互不影响。你可以把local_school看成全局变量,但每个属性如local_school.student都是线程的局部变量,可以任意读写而互不干扰,也不用管理锁的问题,ThreadLocal内部会处理。
可以理解为全局变量local_school是一个dict,不但可以用local_school.student,还可以绑定其他变量,如local_school.teacher等等。
ThreadLocal最常用的地方就是为每个线程绑定一个数据库连接,HTTP请求,用户身份信息等,这样一个线程的所有调用到的处理函数都可以非常方便地访问这些资源。
参考:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431928972981094a382e5584413fa040b46d46cce48e000
import threading # 创建全局ThreadLocal对象: local_school = threading.local() def process_student(): # 获取当前线程关联的student: std = local_school.student print('Hello, %s (in %s)' % (std, threading.current_thread().name)) def process_thread(name): # 绑定ThreadLocal的student: local_school.student = name process_student() t1 = threading.Thread(target= process_thread, args=('Alice',), name='Thread-A') t2 = threading.Thread(target= process_thread, args=('Bob',), name='Thread-B') t1.start() t2.start() t1.join() t2.join()
全局变量local_school就是一个ThreadLocal对象,每个Thread对它都可以读写student属性,但互不影响。你可以把local_school看成全局变量,但每个属性如local_school.student都是线程的局部变量,可以任意读写而互不干扰,也不用管理锁的问题,ThreadLocal内部会处理。
可以理解为全局变量local_school是一个dict,不但可以用local_school.student,还可以绑定其他变量,如local_school.teacher等等。
ThreadLocal最常用的地方就是为每个线程绑定一个数据库连接,HTTP请求,用户身份信息等,这样一个线程的所有调用到的处理函数都可以非常方便地访问这些资源。
参考:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431928972981094a382e5584413fa040b46d46cce48e000
相关文章推荐
- [LeetCode]题解(python):122-Best Time to Buy and Sell Stock II
- [LeetCode]题解(python):121-Best Time to Buy and Sell Stock
- Python 入门
- zabbix调用sendsms.py脚本,发送短信
- [置顶] 【Python】python使用中踩过的坑
- [LeetCode]题解(python):120-Triangle
- python系列之 RabbitMQ - work queues
- [LeetCode]题解(python):119-Pascal's Triangle II
- python使用数据库
- windows环境下安装python模块大招
- 使用 Python 在 Caché 和 Sql Server 之间同步数据
- 使用 Python 连接 Caché 数据库
- [LeetCode]题解(python):118-Pascal's Triangle
- Python~win32com~Excel
- python 贪婪与非贪婪模式
- python学习--之dict
- python 数字金额转化
- Python编码介绍——encode和decode
- Ubuntu安装Python及MYSQL
- python 八荣八耻