パートIは、マルチスレッドのPython、PythonのマルチスレッドはマルチコアCPUを利用することはできませんあなたは、マルチコアCPUを利用したい場合は、あなたが複数のプロセスを使用する必要が導入されました。マルチプロセッシングモジュールを使用して、複数のプロセスでのpython。
次のように図1に示すように、Pythonのマルチプロセスの例です。
1 インポートマルチプロセッシング、時間 2 DEFのdown_load() 。3 time.sleep(1。 ) 4。 プリント(" オーバー実行" ) 5。 6。 IF __name__ == ' __main__ ' : 7 START_TIME = time.time() 。8 のための I における範囲( 5 ): 9 P-multiprocessing.Process =(目標= down_load) #は、プロセスを作成 10 p.start() #のブートプロセス 11 ながら(multiprocessing.active_children())= 0 :! lenの#仕上がりに子プロセスのために待機し、参加に同じ効果 12 パス 13 END_TIME = time.time() 14 印刷(multiprocessing.current_process())#1 現在実行中のスレッド出力 15 を印刷します( end_time- START_TIME) 16 印刷(' 終了')
=======================================結果========================================
オーバーラン
オーバーラン
オーバーラン
オーバーラン
オーバーラン
<_MainProcess(MainProcess、開始)>
1.1728615760803223
終了
図2に示すように、プロセス・プール・プール
プロセス・プールの使用はすぐにいくつかのプロセスを開始することができ、プロセスプールの利点は、それが自動的にプロセスの数を管理して、私たちは最大値を設定するためにそれを与える必要があるということです。プールに提出し、新たな要求がある場合には、プールがまだ満杯でない場合、その要求を実行するための新しいプロセスを作成します。しかし、プールが指定された最大値に達したことをプロセスの数ならば、その要求は待ちますプールがあるプロセスの最後まで、私たちは、新しいタスクを実行するために、以前のプロセスを使用していました。
1 からマルチプロセッシングインポートプール 2 インポートOS 3。 4。 5。 DEFのワーカー(MSG) 。6 プリント(" %が起動S、Dの%のプロセスID "% (MSG、os.getpid())) 7。 8。 IF __name__ == 'を__main__ ' : 9 10 PO =プール(3) #は、プロセスプール、プロセスの最大数を定義3。 11。 ための I における範囲(0、10 ): 12である #。ターゲットに渡さ呼び出されるプール()apply_asyncターゲット((パラメータタプル、)) 13 #子プロセスと各サイクルは、呼び出すために、ターゲットを解放します 14 po.apply_async(FUNC =労働者、引数= (I)) 15 #のないパラメータ関数funcパラメータは、最初の実行を指定し、第二引数をパラメータは書くことはできません 16 印刷(「---- ----スタート」) 17 po.close() #をクローズPO後にクローズプロセスプールは、もはや新しい要求受信 18 po.join() #のすべてのPO待ちを文が近くに配置する必要があります後に子プロセスが終了し、 19 印刷(「-----終了----- 」)
====================== ==========実行結果===================================
[スタート] ---- ----
開始238231 0開始し、プロセスID、プロセスID 23824
2开始执行,进程号为23825
3开始执行,进程号为23823
4开始执行,进程号为23824
5开始执行,进程号为23823
6开始执行,进程号为23825
7开始执行,进程号为23824
8开始执行,进程号为23823
9开始执行,进程号为23824
-----end-----