400 Stimmen

Anzeige des Stacktrace einer laufenden Python-Anwendung

Ich habe diese Python-Anwendung, die von Zeit zu Zeit stecken bleibt und ich kann nicht herausfinden, wo.

Gibt es eine Möglichkeit, dem Python-Interpreter zu signalisieren, dass er Ihnen den genauen Code anzeigt, der gerade läuft?

Eine Art On-the-Fly-Stacktrace?

Verwandte Fragen:

0voto

Michal Čihař Punkte 9417

Für den Fall, dass Sie dies mit uWSGI tun müssen, hat es Python Tracebacker eingebaut und muss nur noch in der Konfiguration aktiviert werden (die Nummer wird an den Namen jedes Arbeiters angehängt):

py-tracebacker=/var/run/uwsgi/pytrace

Sobald Sie dies getan haben, können Sie die Rückverfolgung ausdrucken, indem Sie sich einfach mit dem Socket verbinden:

uwsgi --connect-and-read /var/run/uwsgi/pytrace1

0voto

Armin Ronacher Punkte 31082

Es gibt keine Möglichkeit, sich in einen laufenden Python-Prozess einzuklinken und vernünftige Ergebnisse zu erhalten. Was ich tue, wenn Prozesse sperren ist Einhaken strace in und versuchen, herauszufinden, was genau passiert.

Leider ist strace oft der Beobachter, der Race Conditions "behebt", so dass die Ausgabe auch hier nutzlos ist.

0voto

Douglas Leeder Punkte 50423

Ich kenne nichts Vergleichbares zu Java's Antwort auf SIGQUIT Sie müssen es also möglicherweise in Ihre Anwendung integrieren. Vielleicht könnten Sie einen Server in einem anderen Thread einrichten, der einen Stacktrace als Antwort auf eine Nachricht irgendeiner Art abrufen kann?

-1voto

Wayne Lambert Punkte 528

An der Stelle, an der der Code ausgeführt wird, können Sie diesen kleinen Ausschnitt einfügen, um einen schön formatierten Stack-Trace zu sehen. Es wird angenommen, dass Sie einen Ordner namens logs im Root-Verzeichnis Ihres Projekts.

# DEBUG: START DEBUG -->
import traceback

with open('logs/stack-trace.log', 'w') as file:
    traceback.print_stack(file=file)
# DEBUG: END DEBUG --!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X