I.なぜ、プールの概念を導入し、プールは何ですか
プール
開発は、ハードウェア、ソフトウェアの開発に制限され、ハードウェアが追いついていないこと
コンピュータハードウェアの場合は、コンピュータの使用を最大化するために、セキュリティを確保するために、
実際には、プールは、プログラムの効率が低下するのではなく、コンピュータのハードウェアのセキュリティを確保することです
我々は、プロセスまたはスレッドを開くことができなく無制限、プロセスとスレッドを再利用する場合。だから我々はこの問題に対処するために、プロセス・プール、スレッドプールを使用する必要があります。
二.Pythonモジュール----- concurrent.futuresモジュール(同時フューチャー)
1.concurrentモジュールは、並列タスクを作成するために使用されるより高いレベルのインターフェースを提供します。
2.モジュールインポートプロセスとスレッドプールのプール
concurrent.futuresからインポートProcessPoolExecutor进程池
concurrent.futuresからインポートThreadPoolExecutor线程池
3.P = ProcessPoolExecutorプロセスプール用(max_works)あなたはmax_worksのデフォルトを書かない場合は、CPUの数です
スレッドプール用のp = ThreadPoolExecutor(max_works)あなたはmax_worksのデフォルトを書かない場合はCPU * 5の数であり、
4.p.submit(タスク、i)はiは所望のタスクパラメータに提出された、非同期タスクの関数であります
OBJ = p.submit(タスク、i)は、対象物OBJを返します
obj.result()関数の結果を返します
p.shutdownは()近い参加閉じ池に対応します
III。スレッド・プール、プール・プロセス
同時に基づいて、スレッドプールとプールのプロセスモジュール
1 から concurrent.futuresがインポートThreadPoolExecutor、ProcessPoolExecutor 2 インポート時間を 3 4 デフタスク(N): 5 プリント(N) 6 time.sleep(2 ) 7 戻り N + 1 8 9 DEF (N)call_back: 10 印刷(' 结果是:'n.result()) 11 12 なら__name__ == ' __main__ ' : 13 START = time.time() 14 プール= ThreadPoolExecutor(5 ) 15 #プール= ProcessPoolExecutor(5) 16 のための I における範囲(7 ): 17の RES = pool.submit(タスク、I).result() 18 プリント(RES) 19 20 pool.shutdown() 21 22 プリント(time.time() - 開始) 23 #14.00873589515686
concurrent.futures インポートThreadPoolExecutor、ProcessPoolExecutor インポート時間 デフタスク(N): プリント(N) time.sleep( 2 ) リターンを N + 1 DEF call_back(N): プリント(' 结果是:' 、n.result())もし__name__ == ' __main__ ' : 開始 = time.time() プール = ThreadPoolExecutor(5 ) #のプール= ProcessPoolExecutorは(5)のための私で 範囲(7 ): RES = pool.submit(タスク、I) p_list.append(RES) pool.shutdown() のための P でp_list: プリント(' >>>:' 、p.result()) プリント(時間。時間() - 開始) #4.002536296844482
非同期コールバックを使用して
concurrent.futures インポートThreadPoolExecutor、ProcessPoolExecutor インポート時間 デフタスク(N): プリント(N) time.sleep( 2 ) リターンを N + 1 DEF call_back(N): プリント(' 结果是:' 、n.result())もし__name__ == ' __main__ ' : 開始 = time.time() プール = ThreadPoolExecutor(5 ) #のプール= ProcessPoolExecutorは(5)のための私で 範囲(7 ): RES = pool.submit(タスク、I).add_done_callback(call_back) #异步 pool.shutdown() プリント(time.time() - 開始) #4.002536296844482