亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

Python線(xiàn)程專(zhuān)題7:條件變量

Genng / 2681人閱讀

摘要:上一篇文章線(xiàn)程專(zhuān)題事件下一篇文章線(xiàn)程專(zhuān)題使用鎖的注意事項(xiàng)條件變量時(shí)構(gòu)建在另一個(gè)鎖上的同步原語(yǔ),當(dāng)需要線(xiàn)程關(guān)注特定的狀態(tài)變化或事件發(fā)生時(shí)將使用這個(gè)鎖。

上一篇文章:Python線(xiàn)程專(zhuān)題6:事件
下一篇文章:Python線(xiàn)程專(zhuān)題8:使用鎖的注意事項(xiàng)

條件變量時(shí)構(gòu)建在另一個(gè)鎖上的同步原語(yǔ),當(dāng)需要線(xiàn)程關(guān)注特定的狀態(tài)變化或事件發(fā)生時(shí)將使用這個(gè)鎖。典型的用法是生產(chǎn)者與消費(fèi)者問(wèn)題,其中一個(gè)線(xiàn)程生產(chǎn)的數(shù)據(jù)提供給另外一個(gè)線(xiàn)程使用。

語(yǔ)法:
c=Condition(lock)
穿件新的條件變量。lock時(shí)可選的Lock或RLock的實(shí)例。如果未提供lock參數(shù),就會(huì)創(chuàng)建新的RLock實(shí)例供條件變量使用。
常用方法:
c.acquire(*args):獲取底層鎖。此方法將調(diào)用底層鎖上對(duì)應(yīng)的acquire(*args)方法。

c.release():釋放底層鎖。此方法將調(diào)用底層鎖上對(duì)應(yīng)的release()方法

c.wait(timeout):等待直到獲取通知或出現(xiàn)超時(shí)為止。此方法在調(diào)用線(xiàn)程已經(jīng)獲取鎖之后調(diào)用。
調(diào)用時(shí),將釋放底層鎖,而且線(xiàn)程將進(jìn)入睡眠狀態(tài),直到另一個(gè)線(xiàn)程在條件變量上執(zhí)行notify()或notify_all()方法將其喚醒為止。
在線(xiàn)程被喚醒后,線(xiàn)程講重新獲取鎖,方法也會(huì)返回。timeout是浮點(diǎn)數(shù),單位為秒。
如果超時(shí),線(xiàn)程將被喚醒,重新獲取鎖,而控制將被返回。

c.notify(n):?jiǎn)拘岩粋€(gè)或多個(gè)等待此條件變量的線(xiàn)程。此方法只會(huì)在調(diào)用線(xiàn)程已經(jīng)獲取鎖之后調(diào)用,
而且如果沒(méi)有正在等待的線(xiàn)程,它就什么也不做。
n指定要喚醒的線(xiàn)程數(shù)量,默認(rèn)為1.被喚醒的線(xiàn)程在它們重新獲取鎖之前不會(huì)從wait()調(diào)用返回。

c.notify_all():?jiǎn)拘阉械却藯l件的線(xiàn)程。
實(shí)例模版:使用條件變量
#條件變量實(shí)例
from threading import Condition

c=Condition()
def producer():
    while True:
        c.acquire()
        #生產(chǎn)東西
        ...
        c.notify()
        c.release()

def consumer():
    while True:
        c.acquire()
        while 沒(méi)有可用的東西:
            c.wait()#等待出現(xiàn)
        c.release()
        #使用生產(chǎn)的東西
        ...
注意:如果存在多個(gè)線(xiàn)程等待同一個(gè)條件,notify()操作會(huì)喚醒他們中的一個(gè)或多個(gè)(這種行為取決于底層的操作系統(tǒng))。因此,始終有這樣的可能:某個(gè)線(xiàn)程被喚醒后,缺發(fā)現(xiàn)它等待的條件不存在了,這解釋了為什么在consumer函數(shù)中使用while循環(huán),如果線(xiàn)程醒來(lái),但是生成的項(xiàng)已經(jīng)消失,它就會(huì)回去等待下一個(gè)信號(hào)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/42418.html

相關(guān)文章

  • Python線(xiàn)程專(zhuān)題縱覽篇

    摘要:上一篇文章進(jìn)程專(zhuān)題完結(jié)篇多進(jìn)程處理的一般建議下一篇文章線(xiàn)程專(zhuān)題多線(xiàn)程使用的必要性進(jìn)程線(xiàn)程進(jìn)程能夠完成多任務(wù),比如在一個(gè)電腦上可以運(yùn)行多個(gè)軟件。由于占用資源少,也使得多線(xiàn)程程序并發(fā)比較高。 上一篇文章:Python進(jìn)程專(zhuān)題完結(jié)篇:多進(jìn)程處理的一般建議下一篇文章:Python線(xiàn)程專(zhuān)題1:多線(xiàn)程使用的必要性 進(jìn)程VS線(xiàn)程 進(jìn)程:能夠完成多任務(wù),比如在一個(gè)電腦上可以運(yùn)行多個(gè)軟件。線(xiàn)程:也能夠...

    張紅新 評(píng)論0 收藏0
  • Python線(xiàn)程專(zhuān)題6:事件

    摘要:上一篇文章線(xiàn)程專(zhuān)題信號(hào)量與有邊界的信號(hào)量下一篇文章線(xiàn)程專(zhuān)題條件變量事件用于在線(xiàn)程之間通信。一個(gè)線(xiàn)程發(fā)送事件信號(hào),一個(gè)或多個(gè)其他線(xiàn)程等待它。阻塞直到內(nèi)部標(biāo)志為。最壞的情況是,由于事件信號(hào)丟失,整個(gè)程序?qū)?huì)掛起。 上一篇文章:Python線(xiàn)程專(zhuān)題5:信號(hào)量與有邊界的信號(hào)量下一篇文章:Python線(xiàn)程專(zhuān)題7:條件變量事件用于在線(xiàn)程之間通信。一個(gè)線(xiàn)程發(fā)送【事件】信號(hào),一個(gè)或多個(gè)其他線(xiàn)程等待它。...

    huhud 評(píng)論0 收藏0
  • Python線(xiàn)程專(zhuān)題8:使用鎖的注意事項(xiàng)

    摘要:上一篇文章線(xiàn)程專(zhuān)題條件變量下一篇文章線(xiàn)程專(zhuān)題線(xiàn)程終止與掛起使用諸如之類(lèi)的鎖原語(yǔ)時(shí),必須多加小心,鎖的錯(cuò)誤使用很容易導(dǎo)致死鎖或相互競(jìng)爭(zhēng)。依賴(lài)鎖的代碼應(yīng)該保證當(dāng)出現(xiàn)異常時(shí)可以正常的釋放鎖。 上一篇文章:Python線(xiàn)程專(zhuān)題7:條件變量下一篇文章:Python線(xiàn)程專(zhuān)題9:線(xiàn)程終止與掛起 使用諸如Lock、RLock、Semphore之類(lèi)的鎖原語(yǔ)時(shí),必須多加小心,鎖的錯(cuò)誤使用很容易導(dǎo)致死鎖或...

    phoenixsky 評(píng)論0 收藏0
  • Python進(jìn)程專(zhuān)題6:共享數(shù)據(jù)與同步

    摘要:可以使用標(biāo)準(zhǔn)的索引切片迭代操作訪(fǎng)問(wèn)它,其中每項(xiàng)操作均鎖進(jìn)程同步,對(duì)于字節(jié)字符串,還具有屬性,可以把整個(gè)數(shù)組當(dāng)做一個(gè)字符串進(jìn)行訪(fǎng)問(wèn)。當(dāng)所編寫(xiě)的程序必須一次性操作大量的數(shù)組項(xiàng)時(shí),如果同時(shí)使用這種數(shù)據(jù)類(lèi)型和用于同步的單獨(dú)大的鎖,性能將極大提升。 上一篇文章:Python進(jìn)程專(zhuān)題5:進(jìn)程間通信下一篇文章:Python進(jìn)程專(zhuān)題7:托管對(duì)象 我們現(xiàn)在知道,進(jìn)程之間彼此是孤立的,唯一通信的方式是隊(duì)...

    Yuanf 評(píng)論0 收藏0
  • Python線(xiàn)程專(zhuān)題2:多線(xiàn)程共享全局變量

    摘要:上一篇文章線(xiàn)程專(zhuān)題多線(xiàn)程使用的必要性下一篇文章線(xiàn)程專(zhuān)題對(duì)象在一個(gè)進(jìn)程內(nèi)的所有線(xiàn)程共享全局變量。但多線(xiàn)程對(duì)全局變量的更改會(huì)導(dǎo)致變量值得混亂。 上一篇文章: Python線(xiàn)程專(zhuān)題1:多線(xiàn)程使用的必要性下一篇文章:Python線(xiàn)程專(zhuān)題3:thread對(duì)象 在一個(gè)進(jìn)程內(nèi)的所有線(xiàn)程共享全局變量。但多線(xiàn)程對(duì)全局變量的更改會(huì)導(dǎo)致變量值得混亂。 實(shí)例:驗(yàn)證同一個(gè)進(jìn)程內(nèi)所有線(xiàn)程共享全局變量 代碼: #...

    Tangpj 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<