ホームページ >バックエンド開発 >Python チュートリアル >ライブ Python アプリケーションのスタック トレースをその場で明らかにするにはどうすればよいですか?
Python の安定性にもかかわらず、アプリケーションがデッドロックに遭遇したり、予期せずフリーズしたりすることがあります。これらの問題の根本原因を特定するのは難しい場合があります。
実行中の Python プログラムの現在の状態を把握するには、便利なツールが「オンザフライ」スタック トレース。これにより、実行されている正確なコードを検査し、問題の原因を特定できる可能性があります。
モジュールを使用してオンザフライ スタック トレースを有効にすることができます。 -フライスタックトレース検査。このモジュールは Unix システム上でのみ動作し、シグナルを利用します:
<code class="python">import code, traceback, signal def debug(sig, frame): d={'_frame':frame} d.update(frame.f_globals) d.update(frame.f_locals) i = code.InteractiveConsole(d) message = "Signal received : entering python shell.\nTraceback:\n" message += ''.join(traceback.format_stack(frame)) i.interact(message) def listen(): signal.signal(signal.SIGUSR1, debug)</code>
このモジュールを使用するには、プログラムの初期化中に listen() を呼び出すだけです:
<code class="python">listen()</code>
プログラムで問題が発生した場合は、kill を使用するか、Python 内で SIGUSR1 シグナルを送信します。
<code class="python">os.kill(pid, signal.SIGUSR1)</code>
これにより、プログラムが中断され、実行ポイントで対話型の Python コンソールが開きます。スタック トレースを調べて変数を調べて、問題の原因を特定できます。
このアプローチでは、信号がトリガーされたときに I/O 操作が中断される可能性があることに注意してください。
より広範なデバッグについては、別のスクリプトを使用してパイプ経由の通信を確立し、バックグラウンド プロセスのデバッグを可能にすることができます。
以上がライブ Python アプリケーションのスタック トレースをその場で明らかにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。