為什么線程之間共享全局變量?
解答:因為多線程是在同一個進程中,所以可以共享全局變量。
示例1:不加join方法的效果:
根據CPU的調度的不同,讀取和寫入兩個任務會分別對全局變量進行操作。導致期望的結果不能滿足。

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方法,表示讀取數據任務會等待寫入數據任務執行完成后再去讀取。

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()
執行結果: