python怎么定义线程局部变量


本文摘自php中文网,作者(*-*)浩,侵删。

有个概念叫做线程局部变量,一般我们对多线程中的全局变量都会加锁处理,这种变量是共享变量,每个线程都可以读写变量,为了保持同步我们会做枷锁处理。

但是有些变量初始化以后,我们只想让他们在每个线程中一直存在,相当于一个线程内的共享变量,线程之间又是隔离的,就是局部变量。python threading模块中就提供了这么一个类,叫做local。(推荐学习:Python视频教程)

使用局部变量的时候,需要传递参数,比如有这样一个例子,程序需要处理客户申请,每来一个客户,就新开一个线程进行处理,而客户有姓名、年龄、性别等属性(参数),如果都需要传递参数的话很繁琐。Python提供了threading.local模块,方便我们实现线程局部变量的传递。直接看下面的例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

# /usr/bin/env python

# coding:utf-8

 

 

import threading

 

# Threading.local对象

ThreadLocalHelper = threading.local()

lock = threading.RLock()

 

class MyTheadEx(threading.Thread):

    def __init__(self, threadName, name, age, sex):

        super(MyTheadEx, self).__init__(name=threadName)

        self.__name = name

        self.__age = age

        self.__sex = sex

 

    def run(self):

        global ThreadLocalHelper

        ThreadLocalHelper.ThreadName = self.name

        ThreadLocalHelper.Name = self.__name

        ThreadLocalHelper.Age = self.__age

        ThreadLocalHelper.Sex = self.__sex

        MyTheadEx.ThreadPoc()

 

    # 线程处理函数

    @staticmethod

    def ThreadPoc():

        lock.acquire()

        try:

            print 'Thread={id}'.format(id=ThreadLocalHelper.ThreadName)

            print 'Name={name}'.format(name=ThreadLocalHelper.Name)

            print 'Age={age}'.format(age=ThreadLocalHelper.Age)

            print 'Sex={sex}'.format(sex=ThreadLocalHelper.Sex)

            print '----------'

        finally:

            lock.release()

 

if __name__ == '__main__':

    Tom = {'Name': 'tom', 'Age': 20, 'Sex': 'man'}

    xiaohua = {'Name': 'xiaohua', 'Age': 18, 'Sex': 'woman'}

    Andy = {'Name': 'Andy', 'Age': 40, 'Sex': 'man'}

    T = (Tom, xiaohua, Andy)

    threads = []

    for i in range(len(T)):

        t = MyTheadEx(threadName='id_{0}'.format(i), name=T[i]['Name'], age=T[i]['Age'], sex=T[i]['Sex'])

        threads.append(t)

    for i in range(len(threads)):

        threads[i].start()

    for i in range(len(threads)):

        threads[i].join()

    print 'All Done!!!'

可见,每个线程都可以对threading.local对象进行读写,且互相不干扰。合理使用threading.local可以极大简化代码逻辑,同时保证各个子线程的数据安全。Threading.local最大的用处就是HTTP请求时绑定用户的信息,这样每个用户线程可以非常方便访问各自的资源而互不干扰。

更多Python相关技术文章,请访问Python教程栏目进行学习!

以上就是python怎么定义线程局部变量的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python运算符-编程中最常用的比较运算符(实例解析)

Python 2.7.x 和 3.x 版本的重要区别

如何用Python计算1到100的和?

Python smtp发送邮件的详细介绍(附代码)

Python字典dict类型合并详解

Python中的%是什么意思

Python对多属性的重复数据去重

Python里sep是什么意思

Python中的sort的方法使用详解

Python怎么创建文件夹

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...