Cela ne répondra peut-être pas directement à votre question, mais vous aidera certainement. Si vous utilisez le profileur avec l'option --sort cumulative, il triera les fonctions par temps cumulé. Ce qui est utile pour détecter non seulement les fonctions lourdes mais aussi les fonctions qui les appellent.
python -m cProfile --sort cumulative myScript.py
Il existe une solution de contournement pour obtenir la fonction de l'appelant :
import inspect
print inspect.getframeinfo(inspect.currentframe().f_back)[2]
Vous pouvez ajouter autant de f_back que vous voulez au cas où vous voudriez que l'appelant appelle, etc. Si vous voulez calculer les appels fréquents, vous pouvez le faire :
record = {}
caller = inspect.getframeinfo(inspect.currentframe().f_back)[2]
record[caller] = record.get(caller, 0) + 1
Ensuite, imprimez-les par ordre de fréquence :
print sorted(record.items(), key=lambda a: a[1])