最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python多線程編程(七):使用Condition實現(xiàn)復雜同步

 更新時間:2015年04月05日 11:43:32   投稿:junjie  
這篇文章主要介紹了Python多線程編程(七):使用Condition實現(xiàn)復雜同步,本文講解通過很著名的“生產者-消費者”模型來來演示在Python中使用Condition實現(xiàn)復雜同步,需要的朋友可以參考下

目前我們已經會使用Lock去對公共資源進行互斥訪問了,也探討了同一線程可以使用RLock去重入鎖,但是盡管如此我們只不過才處理了一些程序中簡單的同步現(xiàn)象,我們甚至還不能很合理的去解決使用Lock鎖帶來的死鎖問題。所以我們得學會使用更深層的解決同步問題。

Python提供的Condition對象提供了對復雜線程同步問題的支持。Condition被稱為條件變量,除了提供與Lock類似的acquire和release方法外,還提供了wait和notify方法。

使用Condition的主要方式為:線程首先acquire一個條件變量,然后判斷一些條件。如果條件不滿足則wait;如果條件滿足,進行一些處理改變條件后,通過notify方法通知其他線程,其他處于wait狀態(tài)的線程接到通知后會重新判斷條件。不斷的重復這一過程,從而解決復雜的同步問題。

下面我們通過很著名的“生產者-消費者”模型來來演示下,在Python中使用Condition實現(xiàn)復雜同步。

復制代碼 代碼如下:

'''
Created on 2012-9-8
 
@author: walfred
@module: thread.TreadTest7
''' 
 
import threading 
import time 
 
condition = threading.Condition() 
products = 0 
 
class Producer(threading.Thread): 
    def __init__(self): 
        threading.Thread.__init__(self) 
 
    def run(self): 
        global condition, products 
        while True: 
            if condition.acquire(): 
                if products < 10: 
                    products += 1; 
                    print "Producer(%s):deliver one, now products:%s" %(self.name, products) 
                    condition.notify() 
                else: 
                    print "Producer(%s):already 10, stop deliver, now products:%s" %(self.name, products) 
                    condition.wait(); 
                condition.release() 
                time.sleep(2) 
 
class Consumer(threading.Thread): 
    def __init__(self): 
        threading.Thread.__init__(self) 
 
    def run(self): 
        global condition, products 
        while True: 
            if condition.acquire(): 
                if products > 1: 
                    products -= 1 
                    print "Consumer(%s):consume one, now products:%s" %(self.name, products) 
                    condition.notify() 
                else: 
                    print "Consumer(%s):only 1, stop consume, products:%s" %(self.name, products) 
                    condition.wait(); 
                condition.release() 
                time.sleep(2) 
 
if __name__ == "__main__": 
    for p in range(0, 2): 
        p = Producer() 
        p.start() 
 
    for c in range(0, 10): 
        c = Consumer() 
        c.start()

代碼中主要實現(xiàn)了生產者和消費者線程,雙方將會圍繞products來產生同步問題,首先是2個生成者生產products ,而接下來的10個消費者將會消耗products,代碼運行如下:

復制代碼 代碼如下:

Producer(Thread-1):deliver one, now products:1
Producer(Thread-2):deliver one, now products:2
Consumer(Thread-3):consume one, now products:1
Consumer(Thread-4):only 1, stop consume, products:1
Consumer(Thread-5):only 1, stop consume, products:1
Consumer(Thread-6):only 1, stop consume, products:1
Consumer(Thread-7):only 1, stop consume, products:1
Consumer(Thread-8):only 1, stop consume, products:1
Consumer(Thread-10):only 1, stop consume, products:1
Consumer(Thread-9):only 1, stop consume, products:1
Consumer(Thread-12):only 1, stop consume, products:1
Consumer(Thread-11):only 1, stop consume, products:1

另外:Condition對象的構造函數可以接受一個Lock/RLock對象作為參數,如果沒有指定,則Condition對象會在內部自行創(chuàng)建一個RLock;除了notify方法外,Condition對象還提供了notifyAll方法,可以通知waiting池中的所有線程嘗試acquire內部鎖。由于上述機制,處于waiting狀態(tài)的線程只能通過notify方法喚醒,所以notifyAll的作用在于防止有線程永遠處于沉默狀態(tài)。

相關文章

  • python實現(xiàn)mask矩陣示例(根據列表所給元素)

    python實現(xiàn)mask矩陣示例(根據列表所給元素)

    這篇文章主要介紹了python實現(xiàn)mask矩陣示例(根據列表所給元素),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Python強大的自省機制詳解

    Python強大的自省機制詳解

    這篇文章主要為大家介紹了Python強大的自省機制,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • Python實現(xiàn)的質因式分解算法示例

    Python實現(xiàn)的質因式分解算法示例

    這篇文章主要介紹了Python實現(xiàn)的質因式分解算法,涉及Python數學運算相關操作技巧,需要的朋友可以參考下
    2018-05-05
  • django使用xlwt導出excel文件實例代碼

    django使用xlwt導出excel文件實例代碼

    這篇文章主要介紹了django使用xlwt導出excel文件實例代碼,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • python中的多線程實例教程

    python中的多線程實例教程

    這篇文章主要介紹了python中的多線程用法,包括線程的創(chuàng)建、同步等核心問題,具有很好的參考借鑒價值,需要的朋友可以參考下
    2014-08-08
  • Python jieba 中文分詞與詞頻統(tǒng)計的操作

    Python jieba 中文分詞與詞頻統(tǒng)計的操作

    這篇文章主要介紹了Python jieba 中文分詞與詞頻統(tǒng)計的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python 如何用terminal輸入參數

    python 如何用terminal輸入參數

    這篇文章主要介紹了python 如何用terminal輸入參數的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 使用Python繪制蛇年春節(jié)祝福藝術圖

    使用Python繪制蛇年春節(jié)祝福藝術圖

    這篇文章主要介紹了如何使用Python的Matplotlib庫繪制一幅富有創(chuàng)意的“蛇年有?!彼囆g圖,這幅圖結合了數字,蛇形,花朵等裝飾,需要的可以參考下
    2025-01-01
  • PyTorch實現(xiàn)手寫數字的識別入門小白教程

    PyTorch實現(xiàn)手寫數字的識別入門小白教程

    這篇文章主要介紹了python實現(xiàn)手寫數字識別,非常適合小白入門學習,本文通過實例圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Pytest 使用簡介

    Pytest 使用簡介

    這篇文章主要介紹了Pytest 使用簡介,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04

最新評論

宁南县| 威远县| 满洲里市| 龙江县| 四子王旗| 株洲县| 孝感市| 定结县| 冕宁县| 江川县| 普定县| 福鼎市| 东乌珠穆沁旗| 松江区| 阿荣旗| 安宁市| 夏邑县| 南康市| 麻城市| 桓台县| 万荣县| 太和县| 镇安县| 延长县| 延吉市| 南宫市| 兴化市| 四会市| 临颍县| 汝州市| 庆安县| 大方县| 灵璧县| 津南区| 横峰县| 汽车| 重庆市| 孝感市| 岐山县| 兰西县| 老河口市|