摘要:上一篇文章線程專題信號(hào)量與有邊界的信號(hào)量下一篇文章線程專題條件變量事件用于在線程之間通信。一個(gè)線程發(fā)送事件信號(hào),一個(gè)或多個(gè)其他線程等待它。阻塞直到內(nèi)部標(biāo)志為。最壞的情況是,由于事件信號(hào)丟失,整個(gè)程序?qū)?huì)掛起。
上一篇文章:Python線程專題5:信號(hào)量與有邊界的信號(hào)量語(yǔ)法:
下一篇文章:Python線程專題7:條件變量事件用于在線程之間通信。一個(gè)線程發(fā)送【事件】信號(hào),一個(gè)或多個(gè)其他線程等待它。
Event實(shí)例管理著一個(gè)內(nèi)部標(biāo)志,可以使用set()方法將它置為True,或者使用clear()方法將它重置為False。wait()方法將阻塞,直到標(biāo)志為True。
e=Event() 創(chuàng)建新的Event實(shí)例,并將內(nèi)部標(biāo)志設(shè)置為False。常用方法:
e.is_set():只有當(dāng)內(nèi)部標(biāo)志設(shè)為True時(shí)才返回True e.set():將內(nèi)部標(biāo)志設(shè)置為True。等待它變?yōu)門rue的所有線程都講被喚醒。 e.clear():將內(nèi)部標(biāo)志重置為False。 e.wait(timeout):阻塞直到內(nèi)部標(biāo)志為True。如果調(diào)用時(shí)內(nèi)部標(biāo)志為True,此方法將立即返回。 否則,它將阻塞,直到另一個(gè)線程調(diào)用set()方法將標(biāo)志設(shè)置為True,或者出現(xiàn)可選的超時(shí)時(shí)。注意
盡管Event對(duì)象可用于給其他線程發(fā)送信號(hào),但不應(yīng)該使用他們來實(shí)現(xiàn)在生產(chǎn)者和消費(fèi)者的通知,例如下面代碼:
evt=Event() def producer(): while True: #生產(chǎn)項(xiàng) ... evt.signal() def consumer(): while True: #等待一個(gè)項(xiàng) evt.wait() #消費(fèi)項(xiàng) ... #清除事件并再次等待 evt.clear()
應(yīng)該 盡量避免上面代碼,因?yàn)檫@段代碼不可靠,因?yàn)樵趀vt.wait() 與evt.clear()操作之間,生產(chǎn)者可能生產(chǎn)了一個(gè)新項(xiàng)。但是,通過清楚事件,在生產(chǎn)者創(chuàng)建一個(gè)新項(xiàng)之前,消費(fèi)者可能看不到這個(gè)新項(xiàng)。最好的情況是:程序?qū)⒔?jīng)過一段很短的停滯,對(duì)項(xiàng)的處理被莫名其妙的推遲。最壞的情況是,由于事件信號(hào)丟失,整個(gè)程序?qū)?huì)掛起。要解決這類問題,最好使用條件變量。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42390.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è)鎖上的同步原語(yǔ),當(dāng)需要線程關(guān)注特定的狀態(tài)變化或事件發(fā)生時(shí)將使用這個(gè)鎖。 上一篇文章:Python線程專題6:事件下一篇文章:Python線程專題8:使用鎖的注意事項(xiàng) 條件變量時(shí)構(gòu)建在另一個(gè)鎖上的同步原語(yǔ),當(dāng)需要線程關(guān)注特定的狀態(tài)變化或事件發(fā)生時(shí)將使用這個(gè)鎖。典型的用法是生產(chǎn)者與消費(fèi)者問題,其中一個(gè)線程生產(chǎn)的...
摘要:有邊界的信號(hào)量語(yǔ)法創(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ù)器的同步原...
摘要:上一篇文章線程專題縱覽篇下一篇文章線程專題多線程共享全局變量在引入多線程之前,我們先來看一個(gè)非常簡(jiǎn)單的實(shí)例。實(shí)例單線程實(shí)例的帥,遠(yuǎn)近聞名第次傳播暫停一秒,不然看不到效果哦結(jié)果按照順序依次打印上面是單線程顯示效果,現(xiàn)在我們來用多線程處理一下。 上一篇文章:Python線程專題縱覽篇下一篇文章:Python線程專題2:多線程共享全局變量 在引入多線程之前,我們先來看一個(gè)非常簡(jiǎn)單的實(shí)例。 ...
摘要:可以使用標(biāo)準(zhǔn)的索引切片迭代操作訪問它,其中每項(xiàng)操作均鎖進(jìn)程同步,對(duì)于字節(jié)字符串,還具有屬性,可以把整個(gè)數(shù)組當(dāng)做一個(gè)字符串進(jìn)行訪問。當(dāng)所編寫的程序必須一次性操作大量的數(shù)組項(xiàng)時(shí),如果同時(shí)使用這種數(shù)據(jù)類型和用于同步的單獨(dú)大的鎖,性能將極大提升。 上一篇文章:Python進(jìn)程專題5:進(jìn)程間通信下一篇文章:Python進(jìn)程專題7:托管對(duì)象 我們現(xiàn)在知道,進(jìn)程之間彼此是孤立的,唯一通信的方式是隊(duì)...
閱讀 2239·2021-11-22 13:52
閱讀 3876·2021-11-10 11:36
閱讀 1419·2021-09-24 09:47
閱讀 1096·2019-08-29 13:54
閱讀 3371·2019-08-29 13:46
閱讀 1952·2019-08-29 12:16
閱讀 2120·2019-08-26 13:26
閱讀 3477·2019-08-23 17:10