8

スレッド、プロセス、およびデータベースへの接続を処理する Python スクリプトがあります。スクリプトを実行すると、python がクラッシュします。

これが発生するケースを明示的に検出することはできません。

現在、Python がクラッシュしたときに詳細情報を取得するためのツール、または作成したすべてのプロセス/接続を表示するためのビューアーを探しています。

4

4 に答える 4

4

プロセス内の例外の完全なトレースバックを表示するモジュールRemoteException.pyを作成しました。Python2. それをダウンロードして、これをコードに追加します。

import RemoteException

@RemoteException.showError
def go():
    raise Exception('Error!')

if __name__ == '__main__':
    import multiprocessing
    p = multiprocessing.Pool(processes = 1)
    r = p.apply(go) # full traceback is shown here

古い答え

私にも問題がありました。

これは私がやったことです...マルチプロセッシング呼び出しをデバッグするRemoteException

RemoteException.py

file.write('\nin %s ' % (Process.thisProcess,)) ソースをコピーし、19行目と次の行 を削除 しますimport Process

問題は、マルチプロセッシングは例外を転送するだけで、トレースバックを失うことです。以下のコードは、トレースバックを保存する Exception オブジェクトを作成します。そして、呼び出しプロセスでそれを印刷します。

スクリプトでは、次のようなことができます。

import RemoteException

def f():
    try:
        # here is code that fails but you do know not where
        pass
    except:
        ty, err, tb = RemoteException.exc_info() # like sys.exc_info but with better message
        raise ty, err, tb

# here follows your multiprocessing call to f
于 2013-01-14T21:31:09.280 に答える
1

あなたのケースはわかりませんが、スレッドまたはマルチプロセッシングを使用している場合、コードは並列処理に適用できます(通常)。難しい場合は、プールなしで関数を呼び出すだけですべてを実行し、エラーをキャッチしてから、プールに再度移動します。

于 2012-11-25T19:58:59.753 に答える
0

特定の Python プロセスに従うオプションを提供する WinPDB と呼ばれるグラフィカル デバッガーがあります。ステップ スルーして、コール スタックのさまざまな場所にあるすべての変数を確認できます。

フォーク時にどのプロセスに従うかを選択できます。

最終的な例外もキャプチャし、その発生場所を確認できます。

http://winpdb.org/

于 2012-11-25T20:06:00.677 に答える