博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程中的局部变量
阅读量:6531 次
发布时间:2019-06-24

本文共 1711 字,大约阅读时间需要 5 分钟。

在实现多线程业务时,如果没有涉及到共享数据处理的业务,还是使用局部变量,必将,在处理共享数据时,还是需要加锁;线程与线程间的局部变量相互独立,变量的处理互补干扰。

在多线程的场景下,针对线程中的局部变量,如果需要让其他业务操作此变量时,此时

  • 局部变量相对当前线程来讲,是全局变量;

  • 局部变量相对其他线程来讲,是局部变量;

为了实现当前线程的局部变量被部分业务处理时,以两个小例子说明下

示例 1:自定义全局变量,以当前线程做为 key

# -*- coding: utf-8 -*-from __future__ import absolute_import, unicode_literalsfrom threading import current_thread, Threadglobal_variable = {}def handler():    std = global_variable[current_thread()]    print 'Hello {} and this thread\'s name is {}'.format(std, current_thread().name)def test_thread(name):    global_variable[current_thread()] = name    handler()t1 = Thread(target=test_thread, args=('Kobe', ), name='thread_kobe')t2 = Thread(target=test_thread, args=('TMC', ), name='thread_tmc')t1.start()t2.start()t1.join()t2.join()print global_variableprint 'end......'

运行结果:

Hello Kobe and this thread's name is thread_kobe Hello TMC and this thread's name is thread_tmc{
: u'Kobe',
: u'TMC'}end......

这样,当前线程的数据不会被其他线程捕捉和处理,但是不建议这么做,毕竟 threading 模块提供了 local

示例 2:使用 local

# -*- coding: utf-8 -*-from __future__ import absolute_import, unicode_literalsfrom threading import current_thread, Thread, locallocal_variable = local()def handler():    std = local_variable.name    print 'Hello {} and this thread\'s name is {}'.format(std, current_thread().name)def test_thread(name):    local_variable.name = name    handler()t1 = Thread(target=test_thread, args=('Kobe', ), name='thread_kobe')t2 = Thread(target=test_thread, args=('TMC', ), name='thread_tmc')t1.start()t2.start()t1.join()t2.join()print local_variableprint 'end......'

运行结果如下:

Hello Kobe and this thread's name is thread_kobeHello TMC and this thread's name is thread_tmc
end......

参考

转载地址:http://lwhbo.baihongyu.com/

你可能感兴趣的文章
spark 作业提交(架构层面)
查看>>
基于Hadoop生态圈的数据仓库实践 —— 环境搭建(三)笔记
查看>>
RMAN概述及其体系结构
查看>>
Shell运算符
查看>>
流程的一些规划
查看>>
mybatis
查看>>
HBase JavaAPI
查看>>
神奇的Invsqrt函数
查看>>
【转载】休眠状态和墓碑状态
查看>>
Django框架开发web网站的网页优化—页面静态化
查看>>
PHP Jquery
查看>>
mysql的MyISAM 和 InnoDB 的区别?优化MYSQL数据库的方法?
查看>>
50道sql练习题和答案
查看>>
获取本地soapUI项目路径
查看>>
窗口可视区和其他一些参数
查看>>
如何利用Mathematica调用C编写的函数
查看>>
java第四次作业
查看>>
Oracle 数据库命令个人总结
查看>>
LeetCode-删除排序数组中的重复项
查看>>
栈的初步学习
查看>>