9
votes

Comment forcer la VM de Python à imprimer une trace de pile?

Je traite avec un serveur écrit Python qui se verrouille et cesse de fonctionner, y compris la journalisation. Je me demande s'il y a un python équivalent au signal "Kill -3" de Java qui imprime au moins la standing actuelle.


1 commentaires

Kill -2 Envoie SIGINT, qui au moins sur Linux semble traduire en une exception keyboardinterrupter . Cela pourrait causer une trace de pile à larguer quelque part. Cela dépend du serveur bien sûr.


3 Réponses :


0
votes

Vous pouvez trouver une solution (Unix uniquement) dans Cette question .


0 commentaires

2
votes
import signal, traceback
def quit_handler(signum,frame):
    traceback.print_stack()
signal.signal(signal.SIGQUIT,quit_handler)

2 commentaires

Si le serveur "se verrouille", il n'obtient pas nécessairement un signal Sigquit, je suppose.


@Andidog: Je pense que vous êtes censé utiliser tuer (1) pour l'envoyer un lorsque vous détectez manuellement qu'il s'est enfermé.



7
votes

Utilisez le module FAULTHANDLER . https://pypi.python.org/pypi/faulthandler/ xxx

Cela fonctionne en dehors de la manipulation du signal de la boucle d'interpréteur de Python au niveau C de sorte qu'il fonctionnera même lorsque l'interprète Python lui-même est suspendu à attendre quelque chose d'autre.

Voir aussi: http://docs.python.org/dev/library/faultandler


1 commentaires

Comme vous indiquez, Faulthandler est inclus dans la bibliothèque standard de Python 3.3+