ミューテックスの待ち行列

まず、ミューテックス:

これはグラブ票の例である:1投票:投票数{1「番号」}の排出ラインのデータファイル

マルチプロセッシングインポートプロセスを、ロック
 インポートJSON
 インポート時間

DEF SET(I):
    DATA_READは json.load(オープン(= ' info_user.txt '' R&LT '、エンコード= 'UTF-8 '))  全て、最初のチェック票見ることができる 
    (2)time.sleep   #1 アナログデータネットワーク遅延読み取るプリント' %S%Sアクセス票'%(I、DATA_READ [ ' ' ]))
 DEF :(I)を取る
    データ = JSON .LOAD(オープン("
    info_user.txt ' ' R&LT 'エンコード= ' UTF-8 ' ))
     IFデータ[ ' 番号' ]> 0:
        データ[ ' 番号' ] =データ[ ' 番号' ] -1 
        time.sleep( 2)   アナログネットワーク書き込みデータを遅延させる 
        json.dump(データ、オープン(info_user.txt W 、エンコード= UTF-8 ))
         印刷'チケット%sの成功'%のI)

DEF 実行(I):
    設定(I)
    I(テイク)



場合 __name__ == ' __main__ ' 

    のための I における範囲(10 ):
        P =プロセス(目標=ラン、引数の= (I))
        P 。開始()


結果:「それらのすべてを見つけるでしょうが切符を得たが、一つだけチケット、高効率マルチプロセスデータもののしかし混乱安全ではないので、このmutexは、安全でないデータの混乱の問題を解決することです

1枚のチケット
1枚のチケットは
チケット持っている
1枚のチケットは
チケット持っている
1枚のチケットは
チケットを持っていると
1枚のチケットは、
チケットは持っている
チケット1は
0成功した購入
購入の成功を 
 2 利用可能成功票 
 3枚のチケット成功し 
 4枚のチケットの成功 
 5 チケット成功 
 6 購入成功 
 7枚のチケットに成功 
 8 購入成功 
 9成功した購入

解決法:ここではプラスミューテックス、データのセキュリティを確保するために、効率をあきらめます

マルチプロセッシングインポートプロセスを、ロック
 インポートJSON
 インポート時間

DEF SET(I):
    DATA_READは json.load(オープン(= ' info_user.txt '' R&LT '、エンコード= 'UTF-8 '))  全て、最初のチェック票見ることができる 
    (2)time.sleep   #1 アナログデータネットワーク遅延読み取るプリント' %S%Sアクセス票'%(I、DATA_READ [ ' ' ]))
 DEF :(I)を取る
    データ = JSON .LOAD(オープン("
    
info_user.txt ' ' R&LT 'エンコード= ' UTF-8 ' ))
     IFデータ[ ' 番号' ]> 0:
        データ[ ' 番号' ] =データ[ ' 番号' ] -1 
        time.sleep( 2)   アナログネットワーク書き込みデータを遅延させる 
        json.dump(データ、オープン(info_user.txt W 、エンコード= UTF-8 ))
         印刷'チケット%sの成功'%のI)

DEF RUN(I、ロック):
    SET(I)
    lock.acquire() #      )(自動的lock.release実行されるコードブロックを実行するから、)lock.acquireを(対応:ここでもロックで使用されてもよい
    乗り(I)
    lock.release()



IF  __name__ == ' __main__ ' 
    ロック = ロック()
     のための I における範囲(10 ):
        P =プロセス(目標= RUN、引数= (I、ロック))
        p.start()

結果:

アクセス投票0 1
 2 アクセス投票1枚の
 3 アクセスチケット1回の
 1 アクセス1票
 4件のアクセス投票1件の
 6 アクセス投票1
 5回のアクセス1枚のチケット
 8件のアクセス投票1
 7 ビュー1票
 9 ビュー1票
0発券成功

第二に、パイプキュー

キューおよびパイプ:パイプやキューデータがメモリに格納され、キューが(パイプライン+ロック)に基づいて達成するために、ロックの複雑な問題から、私たちは自由にさせ、ひいてはインターキュー・プロセスは、ほとんどの通信であります良い選択

OBJ =キュー(MAX_SIZE)規定された方法、MAX_SIZE制限はキューの数であります

しかし:キューがメモリ空間を占有され、MAX_SIZEは、メモリサイズによって制限されます

  データは、キューに入れることができない大規模なデータであり、

キューにデータを挿入するためのQ.put方法。Q.get方法は、キューから読み出され、要素を削除してもよいです。
マルチプロセッシングインポートキュー
Q =キュー(3 
q.put(' 1234 ' 
q.put([ 1,2,3、' E ' ])
q.put( 1 プリント(q.full())  ビューキューがいっぱいされているかどうかを印刷(q.get())
 を印刷(q.get())
 を印刷(q.get())
 を印刷(q.empty())  すでに空である#の印刷(q.get(何の値を取得しないためにキュー後))#、およびブロッキング、ここで亡くなりました




 

おすすめ

転載: www.cnblogs.com/whileke/p/11461645.html