複数のプロセスを実行する各子プロセスのメモリ空間を共有することはできませんお互いのプロセスデータから分離されています
ミューテックス
しかし、プロセス間で単一のオペレーティング・システム上で実行されている、プロセス間でデータを共有しますが、ファイルシステムの同じセットを共有していない、同じファイルへのアクセスので、または同じ端末を印刷
それは可能であり、競争の結果を共有するために競争をもたらす混乱をもたらすことです
#同時動作のうち、高効率、しかしもたらした同じ印刷端末、印刷歪みを競合 からマルチプロセッシングインポートプロセス インポート時間 DEF タスク(名前): 印刷(「%S 1 」%の名称) time.sleep( 1 ) 印刷(" % 2 S "%の名前) time.sleep( 1 ) 印刷(" %S. 3 」%の名前) IF __name__ == ' __main__ ' : のための I に範囲(3 ): P =プロセス(目標=タスク、引数=(" サブプロセスSの%"%I)) p.start() ' ''は、 21サブプロセス 、サブプロセス01 子11の サブプロセス2 2 サブプロセス12 のサブプロセスは、02 子23 のサブプロセス13 のサブプロセス03 「」 '
どのように制御するには、それは、ロック処理です。複数のプロセスが複数の人と比較した場合、ということを意味相互に排他的なミューテックス、
男はバスルームのロックをつかんだ後、他の人がこのタスクの完了は、ロックを解除した後、他の人があるかもしれないまで待機する必要があり、バスルーム:mutexは複数の人が同じリソースの競合に行かなければならある作品グラブがあります......
だから、ミューテックス原理は、シリアル並行性を変更することで、効率を低下させますが、データのセキュリティを確保するために、良い混乱
何のミューテックスロックのみが同時に実行されますミューテックスを追加することの効果によって複雑にされていないプラスがあり、シリアル少なく効率的になります
ソリューション:
インポートモジュールのロック
今、このプログラムは、すべてのプロセスが最初に実行するためにのみロックをつかむためにロックを横取りしようと始まり
のロックを解除してからロックをつかむために引き続き他のプロセスにプロセス上で実行するような
マルチプロセッシングインポートプロセスを、ロック インポート時間 DEF タスク(名前、ミューテックス): #加锁 mutex.acquire() プリント(" %sは1 "%名) time.sleep( 1 ) プリント(" %sの2 "%の名前) time.sleep( 1 ) 印刷(" %sの3 "%の名前) #は把锁拆了 mutex.release() の場合 __name__ == " __main__「: #はオブジェクトインスタンスビルド ミューテックス= ロック() のための I における範囲(3 ): #は同じロックを持つすべての子供がするように、子プロセスに渡されたロック p過程=(対象=タスク、引数=(" 子プロセス% S "%I、ミューテックス)) p.start() 『』『 今のプログラムは、すべてのプロセスが最初に実行するためにのみロックをつかむためにロックを横取りしようと開始し 、他のプロセスへのプロセス上で実行するようなロックを解除してからロックをつかむために引き続き 『』』 「」「 サブプロセス01 のサブプロセス02 03のサブプロセスを 子11 のサブプロセス12 のサブプロセス13 のサブプロセス21 のサブプロセス22 23サブプロセス 「」」
効率を犠牲にし、優れたデータの混乱を確保