Профилирование многопроцессорного пула Python
Я пытаюсь запустить 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» в области, из которой он был вызван. Как я могу сделать то, что я пытаюсь сделать здесь?