python線程中的全局變量與局部變量
阿新 • • 發佈:2018-08-30
__name__ time () pen import 字符串 rom src pre
在python多線程開發中,全局變量是多個線程共享的數據,局部變量是各自線程的,非共享的。
如下幾種寫法都是可以的:
第一種:將列表當成參數傳遞給線程
from threading import Thread import time def work1(nums): nums.append(44) print("----in work1---",nums) def work2(nums): #延時一會,保證t1線程中的事情做完 time.sleep(1) print("----in work2---",nums) if __name__==‘__main__‘: g_nums = [11, 22, 33] t1 = Thread(target=work1, args=(g_nums,)) #這種寫法是將列表當成參數傳遞 t1.start() t2 = Thread(target=work2, args=(g_nums,)) t2.start()
第二種:不傳遞,直接用
from threading import Thread import time def work1(): nums.append(44) print("----in work1---",nums) def work2():#延時一會,保證t1線程中的事情做完 time.sleep(1) print("----in work2---",nums) if __name__==‘__main__‘: nums = [11, 22, 33] t1 = Thread(target=work1) t1.start() t2 = Thread(target=work2) t2.start()
結果都一樣:
對於參數是字符串,數字這種不可變類型的變量
,改變變量的值的時候,要用上global,否則程序報錯。
from threading importThread import time def work1(): global nums nums+1 print("----in work1---",nums) def work2(): #延時一會,保證t1線程中的事情做完 time.sleep(1) print("----in work2---",nums) if __name__==‘__main__‘: nums = 12 t1 = Thread(target=work1) t1.start() t2 = Thread(target=work2) t2.start()
結果:
from threading import Thread import time def work1(nums): nums=nums+1 print("----in work1---",nums) def work2(nums): #延時一會,保證t1線程中的事情做完 time.sleep(1) print("----in work2---",nums) if __name__==‘__main__‘: g_nums = 11 t1 = Thread(target=work1, args=(g_nums,)) t1.start() t2 = Thread(target=work2, args=(g_nums,)) t2.start()
結果:
from threading import Thread import time def work1(nums): nums+1 print("----in work1---",nums) def work2(nums): #延時一會,保證t1線程中的事情做完 time.sleep(1) print("----in work2---",nums) if __name__==‘__main__‘: g_nums = 11 t1 = Thread(target=work1, args=(g_nums,)) t1.start() t2 = Thread(target=work2, args=(g_nums,)) t2.start()
結果:
python線程中的全局變量與局部變量