マルチチャネル技術
1.空間多重化:複数のプログラムは、コンピュータハードウェアの共通セットを共有します
時間2.多重:+保存の状態を切り替えます
1.プログラムは、IO操作を検出すると、オペレーティングシステムは、(CPU使用率を向上させ、プログラムのパフォーマンスには影響しません)、CPUがプログラムの実行権限を奪うだろう
長い時間のためのプログラムは、CPU、CPUのオペレーティングシステムは、(プログラムのパフォーマンスが低下)プログラムの実行権限を奪うだろう占有2
同時実行:あなたが同時に実行できるように見える
並列に:の真の意味と同じ時間を実行し
、シングルコアのコンピュータを並列に達成することはできませんが、同時に実装することができ
同期、非同期:それは仕方の提出の課題である
同期を:ミッションは中に(プログラム・レベルの性能が貼り付けられている)まだタスクを待った後に提出し、何かを行う前に逃げるために結果を返し
ていないジョブ投入後:非同期待つが、コードの次のラインにする別の場所(その結果はそうでなければ取得するために使用されます)
非ブロッキングとブロッキング:プログラム実行中の表現は
、ブロッキング:ブロッキング状態
非ブロッキング:状態を実行するための準備状態を
2つの方法でプロセスを作成します。
#は、プロセス・コード・モジュールがダウンパスから途中で実行される作成 元A からマルチプロセッシングインポートプロセス インポート時間 DEF :テスト(名)を 印刷(「%S 」%の名前) time.sleep( 1 ) 印刷(「こんにちは」) IF __name__ == ' __main__ ': #__name__ ==場合は中のプロセス、 '__main__'を作成する場合:内作成するために、 p過程=(=テスト対象、引数=(' エゴン'、)) #は、プロセスオブジェクトの作成 のpを。開始() #は、プロセスを作成するには、オペレーティング・システムに指示します time.sleep(1 ) 印刷(「こんにちは」) 第二の方法 からマルチプロセッシングインポートプロセス インポート時間 クラス:MyClassの(プロセス) DEF __init__ (セルフ、名前を): スーパー()__init__ () self.name = 名前 DEF テスト(自己): 印刷(' %S '%self.name) time.sleep( 1。 ) を印刷("こんにちは' ) であれば __name__ == ' __main__ ' : P = MyClassの(' エゴン' ) p.start() p.test() 印刷(' 銃")
方法を実行した後にメインプログラムにサブルーチンに参加することです
マルチプロセッシングインポートプロセス インポート時間 DEF :テスト(名前、I) time.sleep(I) 印刷(' こんにちは' ) 場合 __name__ == ' __main__ ' : #p_list = [] #範囲のiについて(3): #1 P =プロセス(目標=試験、引数=( '进程'、i))を #1 p.start() # p_list.append(P) #p_listにおけるpの: # p.join() #のプリント( 'ガン') P =プロセス(目標=テスト、引数の=('エゴン'1 )) P1 =プロセス(目標=試験、引数=(' ジェイソン'、2 )) START_TIME = time.time() p.start() p1.start() p.join() p1.join( ) 印刷(' こんにちは' ) プリント(time.time() - START_TIME)
プロセスオブジェクトの他の方法
マルチプロセッシングインポートプロセスを、current_process インポートOS インポート時間 デフ試験(名): 印刷(' %sは'%名、current_process()PID、。' 子进程%S '%os.getpid()、' 父进程%S '%os.getppid()) time.sleep( 2 ) 印刷(' こんにちは' ) 場合 __name__ == ' __main__ ' : P =プロセス(目標=試験、引数=('エゴン" 、)) p.start() time.sleep( 1 ) p.terminate() #は、現在のプロセスは、本質的には、オペレーティングシステムがプロセスを殺すためにあなたを助けるためにできるようにすることです殺す time.sleep(1 ) 印刷(p.is_aliveを()) #判定処理は、生きている 印刷(「ガン」)
ゾンビプロセスと孤立した
親プロセスの子プロセスが資源を回復するには、2つの方法があります
方法1.join
親プロセス不法死亡2.
すべてのプロセスがゾンビにステップインします
孤立した
親プロセスが不慮の死で死亡していなかった子プロセス
の子供の福祉のためには、Linuxになります(INIT)彼は子プロセスを作成した親不慮の死が採用される場合には孤児院
デーモン
マルチプロセッシングインポートプロセス インポート時間 DEF :テスト(名) を印刷(' %S '%の名称) (time.sleep。1 ) プリント(' %S '%の名前) IF __name__ == ' __main__ ' : P =プロセス(目標=テスト、引数=(' エゴン' )) p.daemon =真 #デーモンプロセスが設定されている p.start() time.sleep( 1) プリント(' BYE ')
ミューテックス
複数のプロセスがデータときに、同じデータが混乱を引き起こす可能性が作動し
、この時点では、プロセスをロックするためには
、シリアルによって複雑になり
効率が低下している間が、データのセキュリティ向上のために
注意:
1.ロックを引き起こす可能性は使用しないでくださいデッドロック
ロックしないグローバルデータにおけるプロセスの一部のみに2錠を
ロックを使用するには、メインプロセスで子プロセスを生成しなければなりません
マルチプロセッシングインポートプロセスを、ロック インポート時間 インポートJSONは DEF :(i)を検索 オープン(と' データ'、' R '、エンコーディング= ' UTF-8 ' :)Fとして データ = f.read() T_D = json.loads (データ) 印刷(' 用户%sの查询余票%sの'%(I、t_d.get(' チケット' ))) デフ(i)を買う: オープン(と' データ'、' R '、エンコード= ' UTF-8 ' Fとして): データ = f.read() T_D = json.loads(データ) time.sleep( 1 ) もし t_d.get(' チケット')> 0: T_D [ ' チケット' ] - = 1 (開放と' データ'、' W '、エンコード= ' UTF-8 ' )、Fとして: json.dump(T_D、F) 印刷('グラブ票成功' ) それ以外: 印刷(' なしチケット' ) DEF RUN(I、ミューテックス): 検索(I) mutex.acquire() #ロブ・ロック を購入(I) mutex.release() #のレリーズロック IF __name__ == ' __main__ ' : ミューテックス =ロック() #はロックを生成 するための I における範囲(10 ): P =プロセス(目標= RUN、引数= (I、ミューテックス)) p.start() データのテキストドキュメント { " チケット":0}