まず、ミューテックス:
これはグラブ票の例である: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(何の値を取得しないためにキュー後))#、およびブロッキング、ここで亡くなりました