不能使用pudb进行多处理

时间:2017-12-25 09:47:48

标签: python pudb

我正在尝试使用pudb进行多处理调试,但我遇到如下错误:

代码:

def worker():
    i = 0
    while i < 10:
        pudb.set_trace()
        i = i + 1
        time.sleep(1)

if __name__ == '__main__':
    p1 = multiprocessing.Process(target=worker)
    p1.start()

错误:

File "/usr/local/lib/python2.7/dist-packages/urwid/raw_display.py", line 545, in _getch
    return ord(os.read(self._term_input_file.fileno(), 1))
TypeError: ord() expected a character, but string of length 0 found

有人知道这个问题吗?

解决方法:

我也问过pudb repo here,我得到了答案。多处理工作者没有任何附加到stdin的东西,因此没有交互式调试器。试试remote debugging

2 个答案:

答案 0 :(得分:0)

此工作现在使用pudb.forked.set_trace()。当前,您必须使用GitHub上的开发版本,但应将其集成到下一个版本中。

有关类似示例,另请参见https://documen.tician.de/pudb/starting.html#using-the-debugger-after-forking

披露:几天前我只是authored this

答案 1 :(得分:0)

如果您使用的是不支持 pudb.forked.set_trace() 的旧版 pudb,您可以使用 pudb.remote.set_trace 来调试多处理代码。

这篇文章很好地概述了如何做到这一点:https://auro-227.medium.com/use-pudb-to-debug-python-multiprocessing-code-c0c5551d010c