コアのCPU(論理プロセッサ番号)を取得1
CPU_COUNT()
インポートOS RES = os.cpu_count() プリント(RES) #4
2.プロセスプール
注意:
プロセスとプールの違い:
プロセス:非同期並行プログラム、プログラムの終了で完全に実行され、子プロセスを待った後、デフォルトでは、メインプロセスの一部
プール:任意の障害なく、非同期並列プログラムの一部は、長い主要プロセスが終了され、すぐにターミネーターすべての子供;
P =プール(6):
6つの並列処理まで可能同じ時間を表し、
細胞プール内のプロセスパラメータ
プール場合、任意のパラメータを指定せずに、デフォルトのos.cpu_countを()ロジックの番号を取得しますプロセッサ
パラメータの速度は、それが現在のパラメータ値が同じ時間に許可されるプロセス(平行)の最大数を表して使用する場合、
複数のタスクを取って、プロセスの速度が速すぎるタスクを実行する場合、プロセス・プールには、実行されます、私たちは、新しいプロセスを作成しません
マルチプロセッシングインポートプロセスを、プール のインポートランダムのOS、タイム、 #(1)との比較プロセスプールと処理速度=>速いプロセスプール DEF FUNC(NUM): 印刷(os.getpid()) を印刷(NUM) time.sleep( 0.1 ) のための I における範囲(1000000 ): パス IF __name__ == ' __main__ ' : #の録画開始時刻 STARTIME = time.time() #1は、プロセスプールを作成 P-プール=(4 ) のための I に範囲(100 ): p.apply_async(FUNC、引数 = (I)) #3プロセスプール p.close() #4.udpメッセージがループ実行終了の子プロセスを待った後、次に下方実行する。 Pを.join() #の最後の記録時間 終了時刻= time.time() 印刷(" 時間が第1を実行している:"、終了時刻-STARTIMEを)#3.7787575721740723 印刷(" プロセス・プールの実行が終わった... " ) #計算prosess実行しています時間 stratime = time.time() LST = [] のための I における範囲(100 )。 P =プロセス(目標= FUNC、引数= (I)) p.start() lst.append(P) 用 I でLST: i.join() ENDTIME = time.time() プリント(「2番ランイベントは次のとおりです。「終了時刻-STARTIME) #4.udpサイクルメッセージ0.919969081878662 印刷(」プロセス実行の終わり... 」)
2.2同期プログラムを適用する、あなたは子プロセスでの直接の戻り値を取得することができます(理解します)
マルチプロセッシングインポートプロセス、プール のインポートOS、時間、ランダム DEF タスク(NUM): 印刷(" NUM:プロセス番号S%S%"%(NUM、os.getpid())) 戻りos.getpid() IF __name__ = = ' __main__ ' : #4並列までに実行すると同時に、プロセス (4 P =プール) のための I におけるレンジ(20です。) RES = p.apply(タスク、引数= (I)) 印刷(" >>>> " 、RES) 印刷(「メインプログラムの終了」)
2.3apply_async非同期プログラムは、あなたが直接取得する子で戻り値を取得することができます
マルチプロセッシングインポートプロセス、プール のインポートOS、時間、ランダム DEF タスク(NUM): 印刷(" NUM:プロセス番号S%S%"%(NUM、os.getpid())) 戻りos.getpid() IF __name__ = = ' __main__ ' : #4並列までに実行すると同時に、プロセス (4 P =プール) のための I におけるレンジ(20です。) RES = p.apply(タスク、引数= (I)) 印刷(" >>>> " 、RES) 印刷(" メインプログラムの終了" ) #(3)apply_async非同期プログラムを、あなたはGETを通じて、戻り値を直接の子プロセスを得ることができます DEF :タスク(NUM) time.sleep(random.uniform( 0.1、1 )) を印刷(" NUM:%sのプロセス番号S%」%(NUM、os.getpid())) 戻りos.getpid() IF __name__ == ' __main__ ' : LST = [] SETVAR = SET() P = プール() のための I 中レンジ(20 ): RESP.apply_async =(タスク、引数=(I)) #<0x7f821508fa58 AT multiprocessing.pool.ApplyResultオブジェクト> lst.append(RES) を印刷(LST) のための私でLST:# は、子供のリターンの現在の値を取得します、自身が障害物が含まれている機能を取得し、近くのないあなたがして参加することができますよう RES = i.get() #GETオブジェクトの値は、プロセスIDである 印刷(RES) setvar.add(RES) を印刷(SETVAR) #{37066、37067 、37068、37069} #3を閉じるプロセスプール p.close() #4.udpサイクルのメッセージの後に。フィニッシュまでの子供のためのすべての待機し、その後ダウン実行 p.join() 印刷(「終了.... 」を)
2.4マップリストを返します(マッピングと同じ高次機能を使用するには、並行性と並列性があることを除きます)
マルチプロセッシングインポートプロセスを、プール インポートOS、時間、ランダム デフタスク(NUM): プリント(" NUM:%S进程号%S "%(NUM、os.getpid())) time.sleep( 0.1 ) 戻り NUM * * 2 の場合__name__ == ' __main__ ' : P = プール() RES = p.map(タスク、レンジ(100 )) 印刷(RES) プリント(" 主进程仕上げ")
2.5近くのペアを持って、同時に、または該当しないで、同時に参加して
マルチプロセッシングインポートプロセスを、プール のインポートOS、時間、ランダム DEF タスク(NUM): 印刷(" NUM:プロセスID%S S%"%(NUM、os.getpid())) time.sleep( 0.1 ) 戻り NUM * 2 * IF __name__ == ' __main__ ' : LST = [] P = プール() のための I におけるレンジ(20 ): #の非同期処理対象RES戻る RES = p.apply_async(タスク、引数= (I) ) lst.append(RES) のための私でLST: #同時に、戻り値、プラスのブロッキング取得 印刷(i.get()) #のシャットダウンプロセスプール #1 p.close() #の#のp.apply_async(タスク、引数=を(100)) #のp.join() 印刷(" メインプロセス完了")