剖析一个python多池(Profiling a python multiprocessing po

2019-08-05 12:44发布

我试图在多池中运行上的每个进程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

不幸的是,试图执行“结果=方(I)”的探查不会影响它是从所谓的范围“结果”。 我怎么能做到什么,我想在这里做什么?

Answer 1:

试试这个:

def square_wrapper(i):
    result = [None]
    cProfile.runctx("result[0] = square(i)", globals(), locals(), "file_%d" % i)
    return result[0]


文章来源: Profiling a python multiprocessing pool