並行プログラミングのスレッド・プール、プール・プロセス

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
非同期コールバック

 

おすすめ

転載: www.cnblogs.com/s686zhou/p/11362449.html