質問

マルチプロセッシングプールの各プロセスでcProfile.runctx()を実行して、ソースのマルチプロセッシングボトルネックを把握しようとしています。これが私がやろうとしていることの簡単な例です:

from multiprocessing import Pool
import cProfile

def square(i):
    return i*i

def square_wrapper(i):
    cProfile.runctx("result = square(i)",
        globals(), locals(), "file_"+str(i))
    # NameError happens here - 'result' is not defined.
    return result

if __name__ == "__main__":
    pool = Pool(8)
    results = pool.map_async(square_wrapper, range(15)).get(99999)
    print results

残念ながら、" result = square(i)"を実行しようとしています。プロファイラーでは、呼び出し元のスコープの「結果」には影響しません。ここでやろうとしていることをどのように達成できますか?

役に立ちましたか?

解決

これを試してください:

def square_wrapper(i):
    result = [None]
    cProfile.runctx("result[0] = square(i)", globals(), locals(), "file_%d" % i)
    return result[0]
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top