プロセスプールプール

コアの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()

    印刷" メインプロセス完了"

 

おすすめ

転載: www.cnblogs.com/youhongliang/p/11871776.html