1

Python サブプロセス (マルチプロセスで起動) をデバッグしようとしています。次のコードのみを含む単純なプロジェクトを作成し、リモート デバッガーを起動してから、プロジェクトを起動しました。settrace ステートメントで Eclipse が壊れることを期待しています。

import multiprocessing
import pydevd

def new_proc():
    print("New Procedure.")

    pydevd.settrace()
    print("After settrace.")

p = multiprocessing.Process(target=new_proc)
p.start()
p.join()

最初の print ステートメントからの出力は表示されますが、2 番目のステートメントからの出力は表示されず、ブレークは実行されません。

次に、settrace() に "suspend" パラメーターを False で送信しました。

import multiprocessing
import pydevd

def new_proc():
    print("New Procedure.")

    pydevd.settrace(suspend=False)
    print("After settrace.")

p = multiprocessing.Process(target=new_proc)
p.start()
p.join()

今回は、両方のメッセージが期待どおりに表示されます。次に、2 番目の print ステートメントにブレークポイントを設定し、再度実行しました。これで、2 番目のメッセージは表示されなくなりました。

したがって、Eclipse が本来の実行を中断しているように見えますが、制御を私に返していません。私が見逃しているものはありますか?

4

1 に答える 1

4

それが正確なコードであり、Windows を使用している場合、問題はマルチプロセッシングを適切に設定していないことです (freeze_support() を確認する必要があります)...つまり、開始している場合リモートデバッガーも適切に: http://pydev.org/manual_adv_remote_debugger.html

すなわち:

import multiprocessing
import pydevd

def new_proc():
    print("New Procedure.")

    pydevd.settrace()
    print("After settrace.")

if __name__ == '__main__':
    multiprocessing.freeze_support()

    p = multiprocessing.Process(target=new_proc)
    p.start()
    p.join()
于 2013-06-10T16:10:01.823 に答える