摘要:上一篇文章線程專題信號量與有邊界的信號量下一篇文章線程專題條件變量事件用于在線程之間通信。一個線程發(fā)送事件信號,一個或多個其他線程等待它。阻塞直到內(nèi)部標志為。最壞的情況是,由于事件信號丟失,整個程序?qū)炱稹?/p>
上一篇文章:Python線程專題5:信號量與有邊界的信號量語法:
下一篇文章:Python線程專題7:條件變量事件用于在線程之間通信。一個線程發(fā)送【事件】信號,一個或多個其他線程等待它。
Event實例管理著一個內(nèi)部標志,可以使用set()方法將它置為True,或者使用clear()方法將它重置為False。wait()方法將阻塞,直到標志為True。
e=Event() 創(chuàng)建新的Event實例,并將內(nèi)部標志設置為False。常用方法:
e.is_set():只有當內(nèi)部標志設為True時才返回True e.set():將內(nèi)部標志設置為True。等待它變?yōu)門rue的所有線程都講被喚醒。 e.clear():將內(nèi)部標志重置為False。 e.wait(timeout):阻塞直到內(nèi)部標志為True。如果調(diào)用時內(nèi)部標志為True,此方法將立即返回。 否則,它將阻塞,直到另一個線程調(diào)用set()方法將標志設置為True,或者出現(xiàn)可選的超時時。注意
盡管Event對象可用于給其他線程發(fā)送信號,但不應該使用他們來實現(xiàn)在生產(chǎn)者和消費者的通知,例如下面代碼:
evt=Event() def producer(): while True: #生產(chǎn)項 ... evt.signal() def consumer(): while True: #等待一個項 evt.wait() #消費項 ... #清除事件并再次等待 evt.clear()
應該 盡量避免上面代碼,因為這段代碼不可靠,因為在evt.wait() 與evt.clear()操作之間,生產(chǎn)者可能生產(chǎn)了一個新項。但是,通過清楚事件,在生產(chǎn)者創(chuàng)建一個新項之前,消費者可能看不到這個新項。最好的情況是:程序?qū)⒔?jīng)過一段很短的停滯,對項的處理被莫名其妙的推遲。最壞的情況是,由于事件信號丟失,整個程序?qū)炱?。要解決這類問題,最好使用條件變量。
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/42390.html
摘要:上一篇文章進程專題完結篇多進程處理的一般建議下一篇文章線程專題多線程使用的必要性進程線程進程能夠完成多任務,比如在一個電腦上可以運行多個軟件。由于占用資源少,也使得多線程程序并發(fā)比較高。 上一篇文章:Python進程專題完結篇:多進程處理的一般建議下一篇文章:Python線程專題1:多線程使用的必要性 進程VS線程 進程:能夠完成多任務,比如在一個電腦上可以運行多個軟件。線程:也能夠...
摘要:上一篇文章線程專題事件下一篇文章線程專題使用鎖的注意事項條件變量時構建在另一個鎖上的同步原語,當需要線程關注特定的狀態(tài)變化或事件發(fā)生時將使用這個鎖。 上一篇文章:Python線程專題6:事件下一篇文章:Python線程專題8:使用鎖的注意事項 條件變量時構建在另一個鎖上的同步原語,當需要線程關注特定的狀態(tài)變化或事件發(fā)生時將使用這個鎖。典型的用法是生產(chǎn)者與消費者問題,其中一個線程生產(chǎn)的...
摘要:有邊界的信號量語法創(chuàng)建一個新的有邊界信號量。是計數(shù)器的初始值,如果忽略,將默認為信號量與有邊界的信號量的區(qū)別的工作方式與完全相同,但操作的次數(shù)不能超過的操作次數(shù)。信號量與互斥鎖的微妙差別信號量可用于發(fā)送信號。 上一篇文章:Python線程專題4:Timer對象、Lock對象、Rlock對象下一篇文章:Python線程專題6:事件 信號量與有邊界的信號量 信號量是一個基于計數(shù)器的同步原...
摘要:上一篇文章線程專題縱覽篇下一篇文章線程專題多線程共享全局變量在引入多線程之前,我們先來看一個非常簡單的實例。實例單線程實例的帥,遠近聞名第次傳播暫停一秒,不然看不到效果哦結果按照順序依次打印上面是單線程顯示效果,現(xiàn)在我們來用多線程處理一下。 上一篇文章:Python線程專題縱覽篇下一篇文章:Python線程專題2:多線程共享全局變量 在引入多線程之前,我們先來看一個非常簡單的實例。 ...
摘要:可以使用標準的索引切片迭代操作訪問它,其中每項操作均鎖進程同步,對于字節(jié)字符串,還具有屬性,可以把整個數(shù)組當做一個字符串進行訪問。當所編寫的程序必須一次性操作大量的數(shù)組項時,如果同時使用這種數(shù)據(jù)類型和用于同步的單獨大的鎖,性能將極大提升。 上一篇文章:Python進程專題5:進程間通信下一篇文章:Python進程專題7:托管對象 我們現(xiàn)在知道,進程之間彼此是孤立的,唯一通信的方式是隊...
閱讀 2212·2021-11-22 13:52
閱讀 3847·2021-11-10 11:36
閱讀 1380·2021-09-24 09:47
閱讀 1088·2019-08-29 13:54
閱讀 3360·2019-08-29 13:46
閱讀 1942·2019-08-29 12:16
閱讀 2108·2019-08-26 13:26
閱讀 3471·2019-08-23 17:10