python_並行プログラミング - ロック

マルチプロセス・シミュレーション・チケット〜

インポート時の
 インポートJSON
 からマルチプロセッシングインポートプロセス

クラスショー(プロセス):    
    デフ実行(自己):
        (オープンとチケットFなど):
            DIC = json.load(F)
             印刷" 余票:{} " .format(DIC [ ' チケット' ]))

クラス Buy_ticket(プロセス):  
    デフ __init__ (自己、名):
        スーパー()。__init__ ()
        self.name = 名前
     defを実行します(自己):
        (オープンとチケットFなど):
            DIC = json.load(F)
            time.sleep( 0.1) シミュレーション待ち時間
        IF DIC [ ' チケット' ]> 0:
            DIC [ ' チケット' ] - = 1枚の。
             プリント' {}チケット~~~買う' .format(self.name))を
            time.sleep( 0.1) シミュレート潜伏 
            オープン(との' チケット'' W ' )AS F:
                json.dump(DIC、F)
        印刷' {}チケットを取得できませんでした!!! ' .format(self.name))
 IF  __name__ == ' __main__ '  I におけるレンジ(10 ):
        Q1 = ショー()
        q1.start()
     I における範囲(10 ):
        I = STR(I)
        Q2 = Buy_ticket(I)
        q2.start()

JSONファイル:結果:2人のための1枚の以上のチケットがは〜のチケットを得ました。

ロックを追加した後

インポート時の
 インポートJSON
 からマルチプロセッシングインポートプロセス
 からマルチプロセッシングインポートロック

クラスショー(プロセス):    
    デフ実行(自己):
        (オープンとチケットFなど):
            DIC = json.load(F)
             印刷" 余票:{} " .format(DIC [ ' チケット' ]))

クラス Buy_ticket(プロセス):  購入
    DEFの __init__(セルフ、名前、ロック):   ロックオブジェクトの受信 
        スーパーを()。__init__ ()
        self.name = 名前
        self.lock = ロック
     デフ実行(自己):
        self.lock.acquire()     キードア 
        オープン(との' チケット' )AS F:
            DIC = json.load(F)
            time.sleep( 0.1) シミュレーション待ち時間
        IF DIC [ ' チケット' ]> 0:
            DIC [ ' チケット' ] - = 1枚の。
             プリント' {}チケット~~~買う' .format(self.name))を
            time.sleep( 0.1) シミュレート潜伏 
            オープン(との' チケット'' W ' )AS F:
                json.dump(DIC、F)
        印刷' {}チケットを取得できませんでした!!! ' .format(self.name))
        self.lock.release()     还钥匙
場合 __name__ == ' __main__ '  I における範囲(10 ):
        Q1 = ショー()
        q1.start()
    ロック =ロック()   は、ロックオブジェクトを定義する
    ために、私(10レンジ):
        I = STR(I)
        Q2 = Buy_ticket(I、ロック)#は、子プロセスに渡されたオブジェクトのロック 
        )(q2.startを

JSONファイル:結果:3つだけの人が買って~~

おすすめ

転載: www.cnblogs.com/wangdianchao/p/12044316.html