【问题标题】:Cannot use pudb for multiprocessing无法使用 pudb 进行多处理
【发布时间】:2017-12-25 09:47:47
【问题描述】:

我正在尝试使用 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 但我认为正在发生的事情是 pudb.set_trace() 仅停止主进程,因此其他进程继续不间断并导致错误。也许有一种方法可以配置 pudb 以停止所有工作进程,但如果没有,我会考虑尝试将其作为单个进程进行调试(关闭多处理)。
  • 感谢 kshikama,多处理工作人员没有任何附加到标准输入,所以没有交互式调试器,我必须对多进程使用远程调试
  • 我已经更新了解决方法

标签: python pudb


【解决方案1】:

这从使用pudb.forked.set_trace()的pudb版本2020.1开始有效。

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

披露:我authored this

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-28
      • 2022-07-23
      • 1970-01-01
      • 2017-04-06
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多