線程之間的共享全局變量


 

為什么線程之間共享全局變量?

  解答:因為多線程是在同一個進程中所以可以共享全局變量。

  

 

示例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()
View Code

 

執行結果:

 

 

 

 

示例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()
View Code

 

執行結果:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM