2010-11-28 238 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启动您的函数或类,只需直接调用它并像平常一样进行调试。

相关问题