我正在尝试使用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。
答案 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