国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2020-02-23 00:33:12
字體:
來源:轉載
供稿:網友

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

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

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

下面我們通過很著名的“生產者-消費者”模型來來演示下,在Python中使用Condition實現復雜同步。
代碼如下:
'''
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() 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东乌| 夏津县| 廊坊市| 太谷县| 章丘市| 黄石市| 江山市| 大竹县| 沭阳县| 巴林左旗| 永宁县| 梁山县| 龙州县| 石门县| 醴陵市| 文昌市| 司法| 锦屏县| 平武县| 建始县| 满洲里市| 竹北市| 双流县| 左云县| 宜宾县| 滦平县| 丽水市| 河源市| 嘉兴市| 庆云县| 北海市| 无为县| 文安县| 瓮安县| 凌海市| 绥阳县| 普洱| 泊头市| 会昌县| 碌曲县| 长治县|