03-多线程共享全局变量

import threading
import time


num = 100


def test1():
    global num
    num += 1
    print("test1=====>%d" %num)



def test2():
    print("test2=====>%d" %num)


def main():
    t1 = threading.Thread(target = test1)
    t2 = threading.Thread(target = test2)
    t1.start()
    time.sleep(0.5)
    t2.start()
    time.sleep(0.5)
    print(num)


if __name__ == "__main__":
    main()

 

我们来看一下上述代码的执行情况:

 

 从上面的执行情况中我们能可以看到多线程之间共享全局变量。

全局变量的修改方式

直接对变量进行修改,不加global,会报错。代码以及执行效果如下:

  1 num = 100
  2 ls = [10, 11]
  3 
  4 
  5 def main():
  6     num += 1
  7     print(num)
  8     ls.append(12)
  9     print()
 10 
 11 
 12 if __name__ == "__main__":
 13     main()
View Code

 

 咱们在修改变量之前,先用global声明一下变量,就不会报错

  1 num = 100
  2 ls = [10, 11]
  3 
  4 
  5 def main():
  6     global num
  7     num += 1
  8     print(num)
  9     ls.append(12)
 10     print()
 11 
 12 
 13 if __name__ == "__main__":
 14     main()
View Code

但是咱们发现,修改数列的时候并不需要使用global进行修改。

总结:

如果咱们修改的是变量的指向,那么这个时候就需要进行声明

如果咱们并没有修改变量的指向,仅仅是修改变量指向的值,那么就不需要声明。