摘要:上一篇文章線程專題條件變量下一篇文章線程專題線程終止與掛起使用諸如之類的鎖原語時(shí),必須多加小心,鎖的錯(cuò)誤使用很容易導(dǎo)致死鎖或相互競(jìng)爭(zhēng)。依賴鎖的代碼應(yīng)該保證當(dāng)出現(xiàn)異常時(shí)可以正常的釋放鎖。
上一篇文章:Python線程專題7:條件變量
下一篇文章:Python線程專題9:線程終止與掛起
使用諸如Lock、RLock、Semphore之類的鎖原語時(shí),必須多加小心,鎖的錯(cuò)誤使用很容易導(dǎo)致死鎖或相互競(jìng)爭(zhēng)。依賴鎖的代碼應(yīng)該保證當(dāng)出現(xiàn)異常時(shí)可以正常的釋放鎖。
典型代碼如下:
try: lock.acquire() #關(guān)鍵部分 ... finally: lock.release()
另外,所有種類的鎖還支持上下文管理協(xié)議(寫起來更簡(jiǎn)潔):
with語句自動(dòng)獲取鎖,并且在控制流離開上下文時(shí)自動(dòng)釋放鎖。
with lock: #關(guān)鍵部分 ...
此外,編寫代碼時(shí)一般應(yīng)該避免同時(shí)獲取多個(gè)鎖,例如下面就應(yīng)該盡量避免:
這通知很統(tǒng)一導(dǎo)致應(yīng)用程序神秘死鎖,盡管與集中策略可以避免出現(xiàn)這種情況(如分層鎖定),但是最好在編寫代碼時(shí)避免這種嵌套鎖。
with lock_A: #關(guān)鍵部分 ... with lock_B: #B的關(guān)鍵部分 ...
盡管在Python中可以使用各種鎖和同步原語的組合編寫非常傳統(tǒng)的多線程程序,但有一種首推的編程方式要優(yōu)于其他所有編程方式:即將多線程程序組織為多個(gè)獨(dú)立任務(wù)的集合,這些任務(wù)之間通過消息隊(duì)列進(jìn)行通信,例如下面要講的queue模塊。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42417.html
摘要:上一篇文章進(jìn)程專題完結(jié)篇多進(jìn)程處理的一般建議下一篇文章線程專題多線程使用的必要性進(jìn)程線程進(jìn)程能夠完成多任務(wù),比如在一個(gè)電腦上可以運(yùn)行多個(gè)軟件。由于占用資源少,也使得多線程程序并發(fā)比較高。 上一篇文章:Python進(jìn)程專題完結(jié)篇:多進(jìn)程處理的一般建議下一篇文章:Python線程專題1:多線程使用的必要性 進(jìn)程VS線程 進(jìn)程:能夠完成多任務(wù),比如在一個(gè)電腦上可以運(yùn)行多個(gè)軟件。線程:也能夠...
摘要:上一篇文章線程專題事件下一篇文章線程專題使用鎖的注意事項(xiàng)條件變量時(shí)構(gòu)建在另一個(gè)鎖上的同步原語,當(dāng)需要線程關(guān)注特定的狀態(tài)變化或事件發(fā)生時(shí)將使用這個(gè)鎖。 上一篇文章:Python線程專題6:事件下一篇文章:Python線程專題8:使用鎖的注意事項(xiàng) 條件變量時(shí)構(gòu)建在另一個(gè)鎖上的同步原語,當(dāng)需要線程關(guān)注特定的狀態(tài)變化或事件發(fā)生時(shí)將使用這個(gè)鎖。典型的用法是生產(chǎn)者與消費(fèi)者問題,其中一個(gè)線程生產(chǎn)的...
摘要:上一篇文章線程專題使用鎖的注意事項(xiàng)下一篇文章線程專題多線程按順序執(zhí)行線程沒有任何方法可用于強(qiáng)制終止或掛起。實(shí)用工具函數(shù)函數(shù)名解釋返回當(dāng)前活動(dòng)的對(duì)象數(shù)量。 上一篇文章:Python線程專題8:使用鎖的注意事項(xiàng)下一篇文章:Python線程專題10:queue、多線程按順序執(zhí)行 線程沒有任何方法可用于強(qiáng)制終止或掛起。這是設(shè)計(jì)上的原因,因?yàn)榫帉懢€程程序本身十分復(fù)雜。例如:如果某個(gè)線程已經(jīng)獲取...
摘要:語法創(chuàng)建定時(shí)器對(duì)象,在秒后運(yùn)行函數(shù),和提供傳遞給的參數(shù)和關(guān)鍵字參數(shù)。在調(diào)用方法后才能啟動(dòng)計(jì)定時(shí)器。如果函數(shù)還未執(zhí)行,取消定時(shí)器。否則,鎖將保持已鎖定狀態(tài)。 上一篇文章:Python線程專題3:thread對(duì)象下一篇文章:Python線程專題5:信號(hào)量與有邊界的信號(hào)量 Timer對(duì)象、Lock對(duì)象、Rlock對(duì)象 Timer對(duì)象 Timer對(duì)象用于在稍后的某個(gè)時(shí)間執(zhí)行一個(gè)函數(shù)。 語法:...
摘要:有邊界的信號(hào)量語法創(chuàng)建一個(gè)新的有邊界信號(hào)量。是計(jì)數(shù)器的初始值,如果忽略,將默認(rèn)為信號(hào)量與有邊界的信號(hào)量的區(qū)別的工作方式與完全相同,但操作的次數(shù)不能超過的操作次數(shù)。信號(hào)量與互斥鎖的微妙差別信號(hào)量可用于發(fā)送信號(hào)。 上一篇文章:Python線程專題4:Timer對(duì)象、Lock對(duì)象、Rlock對(duì)象下一篇文章:Python線程專題6:事件 信號(hào)量與有邊界的信號(hào)量 信號(hào)量是一個(gè)基于計(jì)數(shù)器的同步原...
閱讀 3472·2023-04-25 19:39
閱讀 3823·2021-11-18 13:12
閱讀 3645·2021-09-22 15:45
閱讀 2443·2021-09-22 15:32
閱讀 746·2021-09-04 16:40
閱讀 3741·2019-08-30 14:11
閱讀 1896·2019-08-30 13:46
閱讀 1578·2019-08-29 15:43