• python 中 theadLocal 的用法


    在Python的多线程程序里!!!

    global aaa 那这个变量aaa就是多个线程间共享的

    而在函数体里定义的叫局部变量...

    单个线程里的"全局变量",就是线程里的所有函数都可访问,但其它线程无法访问的变量...

    它叫做Threadlocal...

    以下例子是关于thread的....差不多的是response.abc=threading.local()

    # -*- coding: cp936 -*-
    import thread

    import random

    import time
    import sys


    aaa='' #初始用户输入变量,这个是所有线程里的全局变量,不是单个线程里的全局变量
    #线程区域

    ##这得定义在主块里,不可在函数里定义,要不也就只是个"私有变量"了.
    #下面就是"单个线程里的全局变量的定义方法,以下的response.abc就是一个这种变量了.
    response=thread._local()           #这句得在主块里定义,
    response.abc=1    #但这句也定义在主块里就相当于没定义过了,相看下面的#AA3
    #非多线程程序可直接用'aaa'等来命名全局变量,但是"线程里的全局变量"就得是XXX.aaa了

    def getit():
        #多个线程共用此函数,此函数所调用的"response.abc"就是各个线程里自已的"全局变量"
        #所以可引用,但不会被其它线程修改
        print thread.get_ident(),"getit response.id is",response.abc

    def myfunction(string,sleeptime,*args):    
        while 1:

    #AA3 #要在定里定义才行......在这个函数块里,不是主块里..
            response.abc=random.randrange(1,20)    # 这里不可没有,主块里那句可没有,有也不起作用...
            print string,"response.abc is",response.abc
            arg1=random.randrange(1,6)
            time.sleep(arg1)
            getit()
            time.sleep(sleeptime) #sleep for a specified amount of time.
            if aaa=='quit':
                sys.exit()

    def test(x,y):
        print x,y
        global aaa
        while 1:
            aaa=sys.stdin.readline() #或用raw_input()也可的,aaa得是全局函数
            aaa=aaa[:-1] #因为输入quit后aaa的值为'quit ' 用[:-1]去掉最后一个字符
            print 'aaa是',aaa
            if aaa=='quit':
                print "10秒后退出,这里退出的是线程了,不是整个进程"
                time.sleep(10)
                sys.exit()
            time.sleep(1)       


    if __name__=="__main__":
        #加线程区,想加多少就加多少
        thread.start_new_thread(myfunction,("Thread No:1",2))
        thread.start_new_thread(myfunction,("Thread No:2",2))
        thread.start_new_thread(test,('1','2')) #注意这里的test后的参数为序表('1','2'),只是起格式作用...用不着也得加一个序表形式的参数的

        while 1:
            print '主线程'
            print '主线程aaa的值是',aaa
            if aaa!='任意的':
                for i in range(10):
                    print i
                    time.sleep(1)
            else:
                print '输入了(任意的),退出,这里退出的才是进程'
                sys.exit()

  • 相关阅读:
    Redis-高级教程-Java 使用
    Redis-高级教程-分区
    Redis-高级教程-管道技术
    Redis-高级教程-客户端连接
    Redis-高级教程-性能测试
    Redis-高级教程-安全
    Redis-高级教程-数据备份与恢复
    Redis-命令-Stream
    NG-ZORRO + Angular11增加自定义全局样式,不影响其他页面全局样式,仅作用于当前页面
    VUE上传表格文件发送后端,后端解析以及上传文件,前端进行解析的实现方法
  • 原文地址:https://www.cnblogs.com/thinbottle/p/3435657.html
Copyright © 2020-2023  润新知