Creazione del profilo di un pool multiprocessing di Python
-
06-07-2019 - |
Domanda
Sto cercando di eseguire cProfile.runctx () su ogni processo in un pool multiprocessore, per avere un'idea di quali siano i colli di bottiglia del multiprocessore nella mia fonte. Ecco un esempio semplificato di ciò che sto cercando di fare:
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
Sfortunatamente, provando a eseguire " risultato = quadrato (i) " nel profiler non influisce sul 'risultato' nell'ambito da cui è stato chiamato. Come posso realizzare ciò che sto cercando di fare qui?
Soluzione
Prova questo:
def square_wrapper(i):
result = [None]
cProfile.runctx("result[0] = square(i)", globals(), locals(), "file_%d" % i)
return result[0]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow