2016-05-21 5 views
0

私はPythonでマルチプロセッシングライブラリを使用して、複数のコアに機能を分散しています。これを行うには "プール"機能を使用しますが、各プロセッサがいつ作業を完了したかを知りたいと思います。Pythonで "プール"を使用してプロセッサごとにプロセス時間の終了を取得する方法は?

def parallel(m,G): 

    D=0 
    for i in xrange(G): 
     D+=random() 

    return 1*(D<1) 

pool=Pool() 

TOTAL=0 
for i in xrange(10): 
    TOTAL += sum(pool.map(partial(parallel,G=2),xrange(100))) 
print TOTAL 

が、私は通常の状況でtime.time()を使用する方法を知っているが、私は必要なのは、各コアが仕事の一部で完了したときに知っている:ここでは

はコードです。関数にタイムスタンプを直接入れると、処理されるコアを知らなくても多くの時間値が得られます。

アドバイスをよろしくお願いいたします。

+0

サブプロセスが 'によって作成されたので、私は、あなたの質問には答えを持っているかわかりませんプールが閉じられる(またはメインプロセスがシャットダウンする)まで、プールはシャットダウンしません。私は、サブプロセスのシャットダウンコードにフックする公開された機能はないと思います。その情報が必要ですか? – Blckknght

+0

ああ、私は参照してください、しかし、仕事を配布し、time.time()を処理する別の方法があります。私はPythonの初心者であり、高度な機能についてはわかりません。どんな助けも歓迎です。 – supermario

+0

投稿の名前を「Pythonで "pool"を使ってプロセッサごとに処理する方法を教えてください。少なくともそれは私が私の記事で答えていた質問だった。 – robyschek

答えて

1

実際の結果とともに完了時刻をparallelから返し、最後に各ワーカーのタイムスタンプを選択することができます。

import time 
from random import random 
from functools import partial 
from multiprocessing import Pool, current_process 

def parallel(m, G): 
    D = 0 
    for i in xrange(G): 
     D += random() 
    # uncomment to give the other workers more chances to run 
    # time.sleep(.001) 
    return (current_process().name, time.time()), 1 * (D < 1) 

# don't deny the existence of Windows 
if __name__ == '__main__': 
    pool = Pool() 
    TOTAL = 0 
    proc_times = {} 
    for i in xrange(5): 

     # times is a list of proc_name:timestamp pairs 
     times, results = zip(*pool.map(partial(parallel, G=2), xrange(100))) 
     TOTAL += sum(results) 

     # process_times_loc is guaranteed to hold the last timestamp 
     # for each proc_name, see the doc on dict 
     proc_times_loc = dict(times) 
     print 'local completion times:', proc_times_loc 

     proc_times.update(proc_times_loc)    

    print TOTAL 
    print 'total completion times:', proc_times 

しかし仕事は簡単なあなたは毎回time.timeを呼び出すと、CPU時間のあまりを消費することがありますことをしているとき。)

+0

ありがとう!ドキュメンテーションが非常に限られているため、マルチプロセッシング機能を使用するのは少し難しいです。私はdict(...)を読んで、それが何であり、時間があるかを理解します。時間がかかります。したがって、呼び出し頻度を減らすために、「If文」を追加する必要があります。 – supermario

関連する問題