我采取Kosaraju的强连通分量(SCC)在Python图搜索算法。
该程序运行在小数据集很大,但是当我在一个超级大图(超过80万个节点)运行它,它说:“段错误”。
什么可能是它的原因是什么? 谢谢!
其他信息:一是对超大规模数据集运行时,我得到这个错误:
"RuntimeError: maximum recursion depth exceeded in cmp"
然后,我使用重置递归限制
sys.setrecursionlimit(50000)
但有一个“分段故障”
相信我,这不是一个无限循环,它运行在相对较小的数据是正确的。 这是可能耗尽资源的程序?
这发生在一个Python 扩展 (用C语言编写)试图访问一个内存可望而不可及。
你可以跟踪它在以下几个方面。
我知道你已经解决了您的问题,但对于其他人阅读此线程,这里是答案:你要提高你的操作系统分配的Python进程的堆栈。
要做到这一点,取决于操作系统。 在Linux中,可以使用以下命令检查ulimit -s
您的当前值和您可以增加它ulimit -s <new_value>
尝试加倍之前的值,然后继续,如果它不能正常工作加倍,直到你找到一个没有或耗尽内存。
Updating the ulimit worked for my Kosaraju's SCC implementation by fixing the segfault on both Python (Python segfault.. who knew!) and C++ implementations.
For my MAC, I found out the possible maximum via :
$ ulimit -s -H
65532
谷歌搜索找到了我这篇文章,我没有看到下面的“个人解决方案”的讨论。
我最近在Windows子系统用于Linux的Python 3.7的烦恼是:在两台机器上使用相同的熊猫库,一个给了我segmentation fault
和其他报告警告。 目前尚不清楚哪一个是新的,但“重新安装” pandas
解决了这个问题。
命令我的车机上运行。
conda install pandas
更多细节:我正在运行相同的脚本(通过Git的同步),两者都是Windows 10机器WSL +蟒蛇。 何去何从截图的情况下作出。 同时该机在那里命令行上python
会抱怨Segmentation fault (core dumped)
,Jupyter实验室只需重新启动内核每一次。 更糟糕的是,在所有被给予警告。
我是在RPI升级后DLIB遇到此分段错误。 我tracebacked堆栈由Shiplu Mokaddim上述建议,并在一个OpenBLAS库解决。
由于OpenBLAS也是多线程的,用它在一个muilt线程应用程序将成倍繁殖线程,直到段故障。 对于多线程应用程序,设置OpenBlas为单线程模式。
在蟒蛇的虚拟环境,告诉OpenBLAS通过编辑只使用一个线程:
$ workon <myenv>
$ nano .virtualenv/<myenv>/bin/postactivate
并添加:
export OPENBLAS_NUM_THREADS=1
export OPENBLAS_MAIN_FREE=1
重新启动后,我能够运行在所有rpi3b我的图像识别应用了以前崩溃了。
参考: https://github.com/ageitgey/face_recognition/issues/294