Perfilar un grupo de multiprocesamiento de Python
-
06-07-2019 - |
Pregunta
Estoy tratando de ejecutar cProfile.runctx () en cada proceso en un grupo de multiprocesamiento, para tener una idea de cuáles son los cuellos de botella de multiprocesamiento en mi fuente. Aquí hay un ejemplo simplificado de lo que estoy tratando de hacer:
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
Desafortunadamente, tratando de ejecutar " result = square (i) " en el generador de perfiles no afecta 'resultado' en el ámbito desde el que se llamó. ¿Cómo puedo lograr lo que estoy tratando de hacer aquí?
Solución
Prueba esto:
def square_wrapper(i):
result = [None]
cProfile.runctx("result[0] = square(i)", globals(), locals(), "file_%d" % i)
return result[0]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow