2010-11-28 15 views
4

私が望むのは、multiprocessingパッケージを使用して別のプロセスで実行されるコードをステップ・デバッグできることです。`multiprocessing.Process`で動作するPythonコードをデバッグする方法はありますか?

私は約1年前に解決策を探していて、見つけられなかったことを覚えています。私は多くのログをとるように言われましたが、もちろんそれは劣った方法です。だから、誰かがその間に解決策を思いついたのだろうか?たとえば、新しく生成されたプロセスをデバッガに接続するためのメカニズムはありますか?

答えて

1

このプロセスでProcessインターフェイスを使用せずに、手動でデバッグする必要があります。

+0

私は全く理解していませんが、明確にすることはできますか? –

+0

プロセスの開始をコメントアウトデバッグしますが、デバッガを有効にしてこのプロセスのみを実行するコマンドラインオプションにします。プログラムを起動します(無効にしたプロセスは実行されないため、おそらく停止します)。次に、コマンドライン引数を指定してプログラムを起動します。あなたが今コンソールに持っているのは、デバッガの下で実行する必要のあるプロセスです。バックグラウンドの2番目のコンソールで、他のすべてが実行されています。このようにして、デバッグされたプロセスはマルチプロセッシングを使用しません。 –

1

WingIDEが便利です。そのデバッガは本当にいいですし、デバッグ中のコードに対する最小限の計装でリモートプロセスのデバッグもサポートしています。それは無料ではありませんが、コストの価値がある、IMHO。 (私はWingwareとは全く関係ありません。ただ満足した顧客です...)

Wingでリモートデバッグを有効にするには、ファイルwingdbstub.pyをデバッグするアプリと同じディレクトリにコピーする必要があります。デバッグを開始したいコードの場所にインポートします。 (これはWingIDE docsにかなり徹底的に覆われている。)

あなたがthis exampleを取り、次のように見えるようにmyfunc()方法を変更する場合:

def myfunc(conn, commands): 
    import wingdbstub 
    # ... remainder same as original example 

をあなたはWingIDEを起動することができるはず、直後にブレークポイントを設定import行を開き、コンソールからサンプルスクリプトを起動します。自動的にWingに接続し、ブレークポイントで停止する必要があります。

デバッグ接続を正常に動作させるのに問題がある場合は、this postが役に立ちます。 (WingIDEのドキュメントでは、接続の問題をカバーするうえでもうまくやっています。)

+0

私は自分自身を熱心なウィングユーザーです。しかし、私はそれが別のプロセスをデバッグする方法を知らない。 –

+0

これがどのように行われたかを説明するために私の答えを編集しました。 :-) – evadeflow

0

Processを介して関数やクラスを起動するのではなく、直接呼び出して通常どおりデバッグしてください。

+1

プログラムのポイントは、ジョブを処理するために自動的にプロセスを起動するということです。あなたの提案はその目的を破るでしょう。 –

関連する問題