您好,登錄后才能下訂單哦!
今天小編給大家分享一下Python多線程如何使用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
1.線程之間執行是無序的,cpu調度哪個線程就執行哪個線程;
2.主線程等待所有子線程結束后再結束,設置守護線程可以實現當主線程結束時子線程立馬結束;
3.設置守護線程:1.threading.Thread
(daemon=True),2.線程對象.setDaemon(True);
4.線程之間共享全局變量,存在資源競爭問題。
''' 線程之間執行是無序的,cpu調度哪個線程就執行哪個線程 主線程會等待所有子線程結束之后再結束,設置守護線程可以實現當主線程結束時子線程立馬結束 設置守護線程:1.threading.Thread(daemon=True),2.線程對象.setDaemon(True) 線程之間共享全局變量,存在資源競爭問題 ''' # 導入模塊(模塊名.py,包名init.py) import threading import time def task1(count): # 獲取當前線程對象 # t=threading.current_thread() # print('Task1_name:',t.name) print() for i in range(count): print('Task A ',i+1) time.sleep(0.5) def task2(content,count): print('Task2_name:', threading.current_thread().name) for i in range(count): print(f'{content}__Task B ',i+1) time.sleep(0.5) if __name__ == '__main__': t1=threading.Thread(target=task1,name='T1',daemon=True,args=(5,)) t2=threading.Thread(target=task2,name='T2',kwargs={'content':'Yes','count':5}) # 設置守護主線程的第二種方式 # t1.setDaemon(True) t2.setDaemon(True) t1.start() t1.join() # 阻塞函數,t1執行完畢才會向下執行 t2.start() # t2.join() print('Main thread over')
1.資源競爭問題:sum+=1執行時大致會分為三步(取值、加1、寫回),可能剛執行2步cpu就去切換到了另一個線程去執行;
2.解決辦法:1.使用join()方法來設置線程同步(效率不高),2.加鎖(可以保證同一時刻只有一個線程在執行) 。
''' 資源競爭問題:sum+=1執行時大致會分為三步(取值、加1、寫回),可能剛執行2步cpu就去切換到了另一個線程去執行 解決辦法:1.使用join()方法來設置線程同步(效率不高),2.加鎖(可以保證同一時刻只有一個線程在執行) ''' import threading import time sum=0 lock=threading.Lock() def add_num1(): global sum for i in range(1000000): # lock.acquire() # 加鎖 sum+=1 # lock.release() # 解鎖 print(f'{threading.current_thread().name}的計算結果是{sum}') def add_num2(): global sum for i in range(1000000): # lock.acquire() sum+=1 # lock.release() print(f'{threading.current_thread().name}的計算結果是{sum}') if __name__ == '__main__': t1=threading.Thread(target=add_num1) t2=threading.Thread(target=add_num2) t1.start() # 設置阻塞函數,設置線程同步 t1.join() t2.start() print(f'Main的sum值是{sum}')
以上就是“Python多線程如何使用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。