2012-06-19 42 views
3

我试图调试一个简单的python应用程序,但没有运气到目前为止。Python多进程调试

import multiprocessing 

def worker(num): 
    for a in range(0, 10): 
     print a 

if __name__ == '__main__': 
    for i in range(5): 
     p = multiprocessing.Process(target=worker, args=(i,)) 
     p.start() 

我想设置for循环中的断点跟踪“一个”但是,我试图能做到这一点的工具非的值。 到目前为止,我试图与调试运行:

  • PyCharm并收到以下错误:导入错误:没有模块名为 pydevd - http://youtrack.jetbrains.com/issue/PY-6649看起来 他们仍然在修复工作了这一点,从我个人理解,不ETA这个
  • 我也试图与Winpdb调试运行 - http://winpdb.org但它根本不会去我的“工人”法内,只打印的值“A”

我真的很感激任何帮助!

+1

说到多处理/多线程,没有“简单”之类的东西。在我看来,至少。 – JAB

+1

这是PyCharm调试器中特定于Windows的错误。如果您确实需要使用多处理模块调试应用程序,那么我可以推荐使用Unix虚拟机并从PyCharm中为该VM安装远程解释器。 –

回答

0

当尝试调试Python代码时,我很少需要使用传统的调试器,宁愿用trace语句自由地散布我的代码。我想你的代码更改为以下:

import multiprocessing 
import logging 

def worker(num): 
    for a in range(0, 10): 
     logging.debug("(%d, %d)" % (num, a)) 

if __name__ == '__main__': 
    logging.basicConfig(level=logging.DEBUG) 
    for i in range(5): 
     p = multiprocessing.Process(target=worker, args=(i,)) 
     logging.info("Starting process %d" % i) 
     p.start() 

在生产中,您禁用调试跟踪语句通过设置跟踪级别logging.WARNING所以你只记录警告和错误。

在官方Python站点有一个很好的basicadvanced日志教程。

+0

我真的很感谢你的快速反应,但不幸的是,这不是我正在寻找的。我应该在我的问题中提到的是,这只是我需要的功能的一个简单示例,但实际上我正在处理复杂的对象,并且需要断点才能在特定时间查看它们的内容。简单的打印内容是不够的。 – barmaley

+0

我不知道任何与Visual Studio调试器一样强大的python调试器。也许你可以修改日志记录技术以仅在特定条件下记录,有效地模拟一个条件断点? – CadentOrange

+0

日志很棒,但即使日志级别设置在日志语句级别以上,它也不是免费的,因为函数调用在像Python这样的动态语言中有很大的代价。知道一个调试器是很好的,而且pdb附带了Python。那么这只是一个正确设置多处理项目的问题。 – velotron

2

我在我的virtualenv中复制了/Applications/PyCharm\ 2.6\ EAP.app/helpers/pydev/*.pysite-packages中的所有内容,它对我的​​工作(我正在调试芹菜/ kombu,断点工作如预期)。

0

如果普通的pdb/ipdb可以与多处理器一起工作,那将会很棒。如果我能摆脱它,我要办理连续多处理呼叫,如果所配置的进程的数目为1

if processes == 1: 
    for record in data: 
     worker_function(data) 
else: 
    pool.map(worker_function, data) 

然后调试时,应用程序配置为只使用一个单一的过程。这并不包括所有情况,特别是在处理并发问题时,但可能有所帮助。

0

WingIDE Pro立即提供此功能。

不需要额外的代码(例如使用traceback模块)。你只需运行你的程序,Wing调试器不仅可以从子进程打印stdout,但它会打破子进程中的错误和即时创建和交互式shell,因此您可以调试有问题的线程。它没有比这更容易,我知道没有其他IDE以这种方式公开子进程。

是的,这是一个商业产品。但是我还没有找到任何其他提供调试器的IDE来匹配。 PyCharm专业版,Visual Studio社区,科莫多IDE - 我已经尝试过了。在我看来,WingIDE也在解析源文档方面处于领先地位。眼睛绿色配色方案是我现在无法生存的东西。

(是的,我意识到这个问题已经有5年多了,我正在回答。)