python基礎編程:python多線程共享變量的使用和效率方法

今天小編就爲大家分享一篇python多線程共享變量的使用和效率方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
python多線程可以使任務得到併發執行,但是有時候在執行多次任務的時候,變量出現“意外”。

import threading,time
n=0
start=time.time()
def b1(num):
 global n
 n=n+num
 n=n-num
def b2(num):
 for i in range(1000000):
 b1(num)
t1=threading.Thread(target=b2,args=(5,))
t2=threading.Thread(target=b2,args=(8,))
t1.start()
t2.start()
t1.join()
t2.join()
end=time.time()
print(n)
print(end-start)

執行結果:

18
0.7520430088043213

可見變量n從0變成了18,用時是0.75s,原因是計算機系統計算類似n=n+num是分兩步計算的,先計算n+num的值放進內存中,然後再把計算的值賦值給n,正是這個間隙導致了變量出現“意外”。

這時候可以使用threading.Lock來把線程中的變量鎖定,使用完再釋放!

import threading,time
n=0
lock=threading.Lock()
start=time.time()
def b1(num):
 global n
 n=n+num
 n=n-num
def b2(num):
 for i in range(1000000):
  lock.acquire()#等待獲取或獲取修改變量的權限,並霸佔它們
  b1(num)
  lock.release()#釋放霸佔的變量
t1=threading.Thread(target=b2,args=(5,))
t2=threading.Thread(target=b2,args=(8,))
t1.start()
t2.start()
t1.join()
t2.join()
end=time.time()
print(n)
print(end-start)

執行結果:

0
3.335190773010254

雖然變量的值正確了,但慢了很多倍,效率大大的打折扣,多線程的優勢也沒凸顯出來。

所以儘量使用局部變量來代替全局變量在線程中使用,這樣可以避免效率的問題。
其實這裏不僅有技術,更有那些技術之外的東西,比如,如何做一個精緻的程序員,而不是“屌絲”,

程序員本身就是高貴的一種存在啊,難道不是嗎?
內容就以上怎麼多,最後給大家推薦一個口碑不錯的

公衆號【程序員學府】,這裏有很多的老前輩學習技巧,學習心得,面試技巧,職場經歷等分享,更爲

大家精心準備了零基礎入門資料,實戰項目資料,每天都有程序員定時講解Python技術,分享一些學習

的方法和需要留意的小細節,非常歡迎你的加入,未來的日子,編碼之外,有你有我,一起做一個人不

傻,錢很多,活得久的快樂的程序員吧!在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章