9

我正在尝试在多处理池中的每个进程上运行 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)”不会影响调用范围内的“result”。我怎样才能完成我在这里尝试做的事情?

4

1 回答 1

8

试试这个:

def square_wrapper(i):
    result = [None]
    cProfile.runctx("result[0] = square(i)", globals(), locals(), "file_%d" % i)
    return result[0]
于 2009-09-12T10:54:16.580 回答