• python线程中的全局变量与局部变量


    在python多线程开发中,全局变量是多个线程共享的数据,局部变量是各自线程的,非共享的。

     如下几种写法都是可以的:

    第一种:将列表当成参数传递给线程

    from threading import Thread
    import time
    
    def work1(nums):
        nums.append(44)
        print("----in work1---",nums)
    
    def work2(nums):
        #延时一会,保证t1线程中的事情做完
        time.sleep(1)
        print("----in work2---",nums)
    
    if __name__=='__main__':
        g_nums = [11, 22, 33]
    
        t1 = Thread(target=work1, args=(g_nums,)) #这种写法是将列表当成参数传递
        t1.start()
        t2 = Thread(target=work2, args=(g_nums,))
        t2.start()

    第二种:不传递,直接用

    from threading import Thread
    import time
    
    def work1():
        nums.append(44)
        print("----in work1---",nums)
    
    def work2():
        #延时一会,保证t1线程中的事情做完
        time.sleep(1)
        print("----in work2---",nums)
    
    if __name__=='__main__':
        nums = [11, 22, 33]
    
        t1 = Thread(target=work1)
        t1.start()
        t2 = Thread(target=work2)
        t2.start()

    结果都一样:

     对于参数是字符串,数字这种不可变类型的变量

    ,改变变量的值的时候,要用上global,否则程序报错。

    from threading import Thread
    import time
    
    def work1():
        global nums
        nums+1
        print("----in work1---",nums)
    
    def work2():
        #延时一会,保证t1线程中的事情做完
        time.sleep(1)
        print("----in work2---",nums)
    
    if __name__=='__main__':
        nums = 12
    
        t1 = Thread(target=work1)
        t1.start()
        t2 = Thread(target=work2)
        t2.start()

    结果:

    from threading import Thread
    import time
    
    def work1(nums):
        nums=nums+1
        print("----in work1---",nums)
    
    def work2(nums):
        #延时一会,保证t1线程中的事情做完
        time.sleep(1)
        print("----in work2---",nums)
    
    if __name__=='__main__':
        g_nums = 11
    
        t1 = Thread(target=work1, args=(g_nums,)) 
        t1.start()
        t2 = Thread(target=work2, args=(g_nums,))
        t2.start()

    结果:

     

    from threading import Thread
    import time
    
    def work1(nums):
        nums+1
        print("----in work1---",nums)
    
    def work2(nums):
        #延时一会,保证t1线程中的事情做完
        time.sleep(1)
        print("----in work2---",nums)
    
    if __name__=='__main__':
        g_nums = 11
    
        t1 = Thread(target=work1, args=(g_nums,)) 
        t1.start()
        t2 = Thread(target=work2, args=(g_nums,))
        t2.start()

    结果:

    休对故人思故国 且将新火试新茶 诗酒趁年华
  • 相关阅读:
    Vue Scroller:Vue 下拉刷新及无限加载组件
    vue引用公用的头部和尾部文件。
    Java后期拓展(三)Nginx ——高性能的HTTP和反向代理服务器
    JAVA后期拓展(二)ZooKeeper——分布式应用程序协调服务系统
    Java高级部分
    Java后期拓展(一)非关系型数据库Redis
    LoadRunner(四)——深度了解LR相关功能
    LoadRunner(三)——LR相关概念&组成部分
    LoadRunner(二)——性能测试过程概述
    LoadRunner(一)——性能测试基础及性能指标概述
  • 原文地址:https://www.cnblogs.com/sdadx/p/10691245.html
Copyright © 2020-2023  润新知