【发布时间】:2015-09-11 10:21:51
【问题描述】:
我有一些代码使用 Python 的 multiprocessing 模块中的 Pool。性能不是我所期望的,我想分析代码以找出发生了什么。我遇到的问题是每个作业的分析输出都会被覆盖,我无法积累大量的统计数据。
例如,用:
import multiprocessing as mp
import cProfile
import time
import random
def work(i):
x = random.random()
time.sleep(x)
return (i,x)
def work_(args):
out = [None]
cProfile.runctx('out[0] = work(args)', globals(), locals(),
'profile-%s.out' % mp.current_process().name)
return out[0]
pool = mp.Pool(10)
for i in pool.imap_unordered(work_, range(100)):
print(i)
我只获得“最后一个”工作的统计数据,这可能不是计算要求最高的工作。我想我需要将统计信息存储在某个地方,然后仅在清理池时才将它们写出来。
【问题讨论】:
标签: python profiling python-multiprocessing