Gracias a la respuesta de Jon Clements yo era capaz de hacer una función que devuelve una lista ordenada de todas las personas que llaman:
def f1():
names = []
frame = inspect.currentframe()
## Keep moving to next outer frame
while True:
try:
frame = frame.f_back
name = frame.f_code.co_name
names.append(name)
except:
break
return names
y cuando se le llama en una cadena:
def f2():
return f1()
def f3():
return f2()
def f4():
return f3()
print f4()
se parece a esto:
['f2', 'f3', 'f4', '<module>']
En mi caso puedo filtrar a cabo nada en '<module>'
y después, y luego tomar el último elemento a ser el nombre de la persona que llama de origen.
o modificar la secuencia original para rescatar a la primera aparición de cualquier nombre que comienza con '<'
:
frame = frame.f_back
name = frame.f_code.co_name
if name[0] == '<':
break
names.append(name)
A partir de los documentos: 'No está garantizado que existen en todas las implementaciones de Python.' – pradyunsg