python学习_python怎么定义线程局部变量

有个观点叫做线程部分变量,普通咱们对于多线程中的全局变量城市加锁处置,这类变量是同享变量,每一个线程均可以读写变量,为了坚持同步咱们会做桎梏处置。

python学习_python怎么定义线程局部变量

可是有些变量初始化当前,咱们只想让他们正在每一个线程中不断存正在,相称于一个线程内的同享变量,线程之间又是断绝的,便是部分变量。python threading模块中就供给了这么一个类,叫做local。(推选进修:Python视频教程)

运用部分变量的时分,需求传送参数,比方有如许一个例子,顺序需求处置客户请求,每一来一个客户,就新开一个线程停止处置,而客户有姓名、春秋、性别等属性(参数),假如都需求传送参数的话很烦琐。Python供给了threading.local模块,便当咱们完成线程部分变量的传送。间接看上面的例子:

# /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怎样界说线程部分变量的具体内容,更多请存眷酷吧易资源网别的相关文章!

收藏 (0) 打赏

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

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

酷吧易资源网 python教程 python学习_python怎么定义线程局部变量 https://www.kubayi.com/4853.html

常见问题

相关文章

评论
暂无评论