为什么线程之间共享全局变量?
解答:因为多线程是在同一个进程中,所以可以共享全局变量。
示例1:不加join方法的效果:
根据CPU的调度的不同,读取和写入两个任务会分别对全局变量进行操作。导致期望的结果不能满足。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from threading import * from time import * g_list = [] def add_data(): for i in range(3): # 修改全局变量的值,因为列表是可变类型,在原有内存地址上新增数据,所以不需要声明global g_list.append(i) print("add:", i) sleep(0.2) def read_data(): print("读取数据完成:",g_list) if __name__ == '__main__': t1 = Thread(target=add_data) t2 = Thread(target=read_data) t1.start() t2.start()
执行结果:
示例2:使用join方法的效果:
在读取任务之前加上join方法,表示读取数据任务会等待写入数据任务执行完成后再去读取。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from threading import * from time import * g_list = [] def add_data(): for i in range(3): g_list.append(i) print("add:", i) sleep(0.2) def read_data(): print("读取数据完成:", g_list) if __name__ == '__main__': t1 = Thread(target=add_data) t2 = Thread(target=read_data) t1.start() t1.join() # t1子线程会等待t2子线程完成数据写入后再去读取 t2.start()
执行结果: