zoukankan      html  css  js  c++  java
  • 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()

  • 相关阅读:
    克隆用户过狗提权
    一个JS引发的血案
    python-标识符(Identifiers)和关键字(keywords)
    提取nmap扫描出来的xml文件
    Hydra扫描姿势
    Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明
    Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明
    Senparc.Weixin.MP SDK 微信公众平台开发教程(十):多客服接口说明
    Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明
    Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明
  • 原文地址:https://www.cnblogs.com/thinbottle/p/3435657.html
Copyright © 2011-2022 走看看