Python中線程同步的實現(xiàn)
更新時間:2025年06月17日 09:41:42 作者:菜逼の世界
本文主要介紹了Python中線程同步的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
多線程
案例
說明:
- 唱歌方法
sing()
- 跳舞方法
dance()
- 啟用兩個線程調(diào)用
- 主線程結(jié)束
代碼
# 導(dǎo)入線程模塊 import threading import time def sing(name,age): time.sleep(2) print('唱歌者姓名:' + name + ',年齡:' + str(age)) print('正在唱歌...') def dance(name, age): time.sleep(2) print('跳舞者姓名:' + name + ',年齡:' + str(age)) print('正在跳舞...') if __name__ == '__main__': # args 元組傳參 t1 = threading.Thread(target=sing,args=('Alice', 18)) # kwargs 對象傳參 t2 = threading.Thread(target=dance,kwargs={'name': 'Bob', 'age': 18}) t1.start() t2.start() print("主線程結(jié)束")
- 運行
問題現(xiàn)象
- 輸出的結(jié)果和代碼的執(zhí)行順序不一致
- 最后的主線程輸出竟然最先輸出
- 線程的執(zhí)行是異步的并非同步
- 那么如何讓線程同步執(zhí)行呢?請看下一章節(jié) 《解決辦法》
解決辦法
線程同步
- 線程等待
- 互斥鎖
線程等待
調(diào)用線程的等待方法: join()
- 代碼
# 導(dǎo)入線程模塊 from threading import Thread import time def sing(name,age): time.sleep(2) print('唱歌者姓名:' + name + ',年齡:' + str(age)) print('正在唱歌...') def dance(name, age): time.sleep(2) print('跳舞者姓名:' + name + ',年齡:' + str(age)) print('正在跳舞...') if __name__ == '__main__': # args 元組傳參 t1 = Thread(target=sing,args=('Alice', 18)) # kwargs 對象傳參 t2 = Thread(target=dance,kwargs={'name': 'Bob', 'age': 18}) t1.start() t1.join() t2.start() t2.join() print("主線程結(jié)束")
- 運行
互斥鎖
步驟:
- 導(dǎo)入鎖模塊:
from threading import Lock
- 實例化鎖:
lock = Lock()
- 獲取鎖:
lock.acquire()
- 釋放鎖:
lock.release()
代碼
# 導(dǎo)入線程模塊 from threading import Thread, Lock import time def sing(name, age): # 獲取鎖,用于線程同步 lock.acquire() time.sleep(2) print('唱歌者姓名:' + name + ',年齡:' + str(age)) print('正在唱歌...') # 釋放鎖,開啟下一個線程 lock.release() def dance(name, age): # 獲取鎖,用于線程同步 lock.acquire() time.sleep(2) print('跳舞者姓名:' + name + ',年齡:' + str(age)) print('正在跳舞...') # 釋放鎖,開啟下一個線程 lock.release() # 創(chuàng)建一個鎖 lock = Lock() if __name__ == '__main__': # args 元組傳參 t1 = Thread(target=sing, args=('Alice', 18)) # kwargs 對象傳參 t2 = Thread(target=dance, kwargs={'name': 'Bob', 'age': 18}) t1.start() # t1.join() t2.start() # t2.join() # print("主線程結(jié)束")
運行
到此這篇關(guān)于Python中線程同步的實現(xiàn)的文章就介紹到這了,更多相關(guān)Python 線程同步內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 用turtle實現(xiàn)用正方形畫圓的例子
今天小編就為大家分享一篇Python 用turtle實現(xiàn)用正方形畫圓的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11Python列表list解析操作示例【整數(shù)操作、字符操作、矩陣操作】
這篇文章主要介紹了Python列表list解析操作,結(jié)合實例形式分析了Python列表針對整數(shù)、字符及矩陣的解析操作實現(xiàn)技巧,需要的朋友可以參考下2017-07-07Python異步爬蟲實現(xiàn)原理與知識總結(jié)
之前有很多小伙伴想看Python異步爬蟲的有關(guān)知識總結(jié),這次它來了,文中有非常詳細(xì)的代碼示例與注釋,即使對剛開始學(xué)python的小伙伴也很友好,,需要的朋友可以參考下2021-05-05使用Python3 poplib模塊刪除服務(wù)器多天前的郵件實現(xiàn)代碼
這篇文章主要介紹了使用Python3 poplib模塊刪除多天前的郵件的實現(xiàn)代碼,代碼簡單易懂,非常不錯,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04最好的Python DateTime 庫之 Pendulum 長篇解析
datetime 模塊是 Python 中最重要的內(nèi)置模塊之一,它為實際編程問題提供許多開箱即用的解決方案,非常靈活和強大。例如,timedelta 是我最喜歡的工具之一2021-11-11