什么导致了Python分段错误?

2024-04-28 23:49:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在Python中实现Kosaraju的强连接组件(SCC)图搜索算法。

这个程序在小数据集上运行得很好,但是当我在一个超大的图(超过800000个节点)上运行它时,它会说“分段错误”。

可能是什么原因?谢谢您!


其他信息: 首先,在超大数据集上运行时出现此错误:

"RuntimeError: maximum recursion depth exceeded in cmp"

然后我使用

sys.setrecursionlimit(50000)

但有“分割错误”

相信我这不是无限循环,它在相对较小的数据上运行正确。程序是否可能耗尽资源?


Tags: 数据程序信息节点错误组件原因集上
3条回答

我知道您已经解决了您的问题,但是对于阅读此线程的其他人来说,这里是答案:您必须增加操作系统为python进程分配的堆栈。

方法取决于操作系统。在linux中,可以使用命令ulimit -s检查当前值,并使用ulimit -s <new_value>增加当前值

尝试将上一个值加倍,如果不起作用,则继续加倍,直到找到一个确实起作用或内存不足的值为止。

分段故障是一种常见故障,其原因有很多:

  • 内存不足
  • 内存故障
  • 使用查询从数据库中获取一个巨大的数据集(如果获取的数据的大小大于swap mem)
  • 错误的查询/错误代码
  • 具有长循环(多重递归)

当python扩展名(用C编写)试图访问无法访问的内存时,就会发生这种情况。

你可以用以下方法追踪它。

  • 在代码的第一行添加^{}
  • this answer中的标记所述,使用gdb。。在命令提示下

    gdb python
    (gdb) run /path/to/script.py
    ## wait for segfault ##
    (gdb) backtrace
    ## stack trace of the c code
    

相关问题 更多 >