【发布时间】:2014-05-26 21:57:28
【问题描述】:
我使用 Spyder IDE。通常,当我运行非并行脚本时,我倾向于使用print 语句进行调试。根据打印(或不打印)哪些语句,我可以看到发生错误的位置。
例如:
print "Started while loop..."
doWhileLoop = False
while doWhileLoop == True:
print "Doing something important!"
time.sleep(5)
print "Finished while loop..."
在上面,我错过了在某些时候将 doWhileLoop 更改为 False 的行,所以我将永远卡在 while 循环中,但我的 print 语句让我看到它在我的代码中的位置我挂了。
但是,当运行并行化的脚本时,直到进程完成后,我才能得到控制台的输出。通常,我在这种情况下所做的是尝试使用单个进程进行调试(例如,通过仅运行一个任务来临时取消程序的并行性),但目前,我正在处理一个似乎仅发生的错误 当我运行多个任务时。
所以,我无法使用我常用的方法弄清楚这个错误是什么——我应该如何改变我通常的调试实践,以便有效地调试使用多处理的脚本?
【问题讨论】:
-
调试并行的东西很难。您只需要根据具体情况进行操作即可。至于您的
print语句在过程完成之前不会打印,这可能是 Spyder 做了一些不会发生的 stdout 缓冲。您可以在每个打印语句之后执行sys.stdout.flush(),或使用不同的环境。
标签: debugging python-2.7 multiprocessing