【问题标题】:Multithreaded python script silently dies - how to debug多线程 python 脚本静默死亡 - 如何调试
【发布时间】:2011-02-16 20:28:44
【问题描述】:

我有一个 python 脚本,它创建并启动 3 个线程,然后进入键盘中断捕获循环,以在按下 ctrl+c 时发送线程停止信号。

线程的 run 方法有一个顶级的 try-except 记录每个异常,同时创建线程的顶级代码被包装到 try-except 以记录每个异常。

但脚本只是随机死亡,有时一天后,有时一个小时后,没有任何异常被记录。

这让我发疯,因为我不知道如何调试它。

各位有什么想法吗?

编辑: 正如 Luper 建议的那样,查看 syslog 确实揭示了

python[27737]: segfault at 0 ip 0808e1d3 sp b662c5e0 error 4 in python2.5[8048000+fb000]

还是不知道怎么走。

至于代码,它没有做任何花哨的事情,一些文件解析和目录之间的复制,以及通过os.system调用一些可执行文件

【问题讨论】:

  • 你能发布一些示例代码吗?
  • 在 syslog 中查找段错误等?

标签: python multithreading crash


【解决方案1】:

python 中的段错误通常是由用 C 编写的模块中的错误引起的。解释器无能为力。

快速搜索发现导致段错误的常见问题是 1) 内存错误(但您应该会看到更多段错误 - 如果您怀疑这一点,请从 live CD 运行 memcheck),2) 安装损坏(尝试重新安装 python 和软件包,重新下载所有内容)和 3)错误(duh)。

先试试是1)还是2),然后看进程停在哪里,可以用strace记录所有系统调用。这可能会给你一些关于正在发生的事情的其他线索(输出文件可能会变大):

strace -f python my_script.py > strace.out 2>&1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多