私は、remote_pdbとentrをPython 3マルチプロセッシングアプリケーションの迅速なテストと開発の環境として一緒に使用する方法を見つけようとしていますが、私は、ファイル、たとえば、 'mp.py' と実行し、それに保存した場合エンティティの制御下で実行されるデバッグ子プロセス
import time
from multiprocessing import Process
from remote_pdb import RemotePdb
def child():
RemotePdb('localhost', 4444).set_trace()
while True:
print("I am the child")
time.sleep(1)
proc = Process(target=child)
proc.start()
proc.join()
:
python mp.py
それが動作
は以下の些細なテストケースを考えてみましょうとても良く。それは
CRITICAL:root:RemotePdb session open at 127.0.0.1:4444, waiting for connection ...
RemotePdb session open at 127.0.0.1:4444, waiting for connection ...
を表示し、子プロセスでは、予想通り、破壊し、私はnetcatをまたはsocatに関する、と別の端末セッションから接続して、Pythonのデバッガを使用することができます。デバッガを終了すると、子と親が明示的に終了するまで実行されません。
私は今、それは私がmp.pyを編集して、自動クリーン再起動私は保存するたびに取得することができますRemotePdb()の呼び出しをコメントアウトし、
ls mp.py | entr -r python mp.py
でentr
の制御下でスクリプトを実行した場合。
問題は、RemotePdb()呼び出しのコメントを外すときに発生します。
スクリプトは、以前と同じ '接続待ち'メッセージを表示している子を中断しますが、別の端末ウィンドウでnetcat
と接続しようとすると、pdbセッションは応答なしecho - CRに応答して空行だけを表示します。 socat
と同じ結果が得られます。
私はOS X 10.11.6でpython 3.5.3、entr 3.7、remote_pdb 1.2を使って開発しています。
私は何を求めています: 私はentr
とremote_pdb
またはそれを行うことができない理由明確な説明の利点を組み合わせ、コマンド・ライン・ソリューションを提供して答えを受け入れるだろう。
ありがとうございます!
更新 さらなる試験
ls mp.py | entr python mp.py
が動作するデバッガ接続を許可する、すなわち、ENTRに-r
(再起動)オプションは、問題を生じさせるのに必要であることを示しています。残念ながら、再起動オプションはワークフローにとって不可欠です。
更新2:この問題は、プロセスグループの設定に関連しているようです。これはすべての子プロセスが強制終了されることを確認するためにentr -r
によって行われます。 entr
を置き換えるPythonスクリプトを試行している間に、スクリプトがIPythonシェル(!python mp.py
)から起動された場合でも、親プロセスで同じエラー(デバッガにI/Oなし)開始はbash
です。
更新3:remote_pdbの著者と私は、Linuxで問題が発生していないことを個別に確認しました。これはOS Xの問題で、明らかにPythonソケットとプロセスグループと関係しています。私はそれに応じてタグに追加しました。
説明コメントを残さずにダウンワードしても意味がありません。 –