2010-11-28 232 views
4

我想要的是能夠使用multiprocessing包對單個進程中運行的代碼進行逐步調試。有沒有辦法調試在`multiprocessing.Process`上運行的Python代碼?

我記得在一年前找到一個解決方案而沒有找到一個。我被告知要做很多日誌記錄,但當然這是一種劣質的方法。那麼也許有人在此期間提出了一個解決方案?例如,一些使新生成的進程與調試器連接的機制?

回答

1

您可以啓動進程您需要手動調試,而不使用此進程上的Process接口。

+0

我完全不理解,你能澄清嗎? – 2010-11-28 19:13:49

+0

註釋掉開始進程您想要調試但將其設置爲僅運行此進程的命令行選項(啓用調試器)。啓動程序(它可能會因爲您禁用的進程不運行而停滯;))。然後,用命令行參數啓動程序。你現在在控制檯上的東西是你需要在調試器下運行的一個過程。在後臺的第二個控制檯上,其他一切正在運行。這樣調試過程不使用多處理。 – 2010-12-04 16:04:37

1

您可能會發現WingIDE有用。它的調試器非常好,它甚至支持用正在調試的代碼的一些最小工具來調試遠程進程。這不是免費的,但非常值得,恕我直言。 (我不以任何方式隸屬於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

我是一個狂熱的Wing用戶。但我不知道如何使它調試單獨的進程。 – 2010-11-28 19:13:18

0

而不是通過Process啓動您的函數或類,只需直接調用它並像平常一樣進行調試。

相關問題