全局变量在多线程中的应用
全局变量声明方法:
# 全局变量声明
global_变量名 # _代表空格
# 示例
global number
未使用全局变量:
需要通过线程传入实参
import threading
def run1(number):
print(f"run1传入的变量是{number}")
def run2(number):
print(f"run2传入的变量是{number}")
if __name__ == '__main__':
number = 10
t1 = threading.Thread(target=run1,args=(number,)) # 需要变量传递
t1.start()
t2 = threading.Thread(target=run2,args=(number,)) # 需要变量传递
t2.start()
执行结果:
run1传入的变量是10
run2传入的变量是10
使用全局变量:
import threading
def run1(number):
global number2
print(f"run1传入的变量是{number}\n")
print(f"{number2+20},run1中调用的全局变量\n")
def run2(number):
global number2
print(f"run2传入的变量是{number}\n")
print(f"{number2+20},run2中调用的全局变量\n")
if __name__ == '__main__':
number1 = 10
number2 = 20
t1 = threading.Thread(target=run1,args=(number1,)) # 只传入number1
t1.start()
t2 = threading.Thread(target=run2,args=(number1,)) # 只传入number1
t2.start()
执行结果(为了增加代码可读性,我们增加了换行符):
在不传入实参的情况下,通过全局变量也可以直接调用参数。并且通过对比,我们还能发现
多次调用全局变量,并没有改变全局变量本身的值
# run1传入的变量是10
# 40,run1中调用的全局变量
# run2传入的变量是10
# 40,run2中调用的全局变量