错误:分段错误(核心已转储)

问题描述 投票:0回答:10

我是 python 新手,遇到了一个奇怪的错误:

Segmentation fault (core dumped)

当我执行以下代码时:

  class Workspace(QMainWindow, Ui_MainWindow):
    """ This class is for managing the whole GUI `Workspace'.
        Currently a Workspace is similar to a MainWindow
    """

    def __init__(self):
        #p= subprocess.Popen(["java -Xmx256m -jar bin/HelloWorld.jar"],cwd=r'/home/karen/sphinx4-1.0beta5-src/sphinx4-1.0beta5/', shell=True, stdout=subprocess.PIPE, bufsize= 4024)
        try:
            from Queue import Queue, Empty
        except ImportError:
            while True:
    #from queue import Queue, Empty  # python 3.x
                print "error"

        ON_POSIX = 'posix' in sys.builtin_module_names

        def enqueue_output(out, queue):
            for line in iter(out.readline, b''):
                queue.put(line)
            out.close()

        p= Popen(["java -Xmx256m -jar bin/HelloWorld.jar"],cwd=r'/home/karen/sphinx4-1.0beta5-src/sphinx4-1.0beta5/',stdout=PIPE, shell=True, bufsize= 4024)
        q = Queue()
        t = threading.Thread(target=enqueue_output, args=(p.stdout, q))
        #t = Thread(target=enqueue_output, args=(p.stdout, q))
        t.daemon = True # thread dies with the program
        t.start()

# ... do other things here
        def myfunc(q):
            while True:

                try: line = q.get_nowait()
         # or q.get(timeout=.1)
                except Empty:
                    print('Vacio')
                else: # got line
    # ... do something with line

                    print line  


        thread = threading.Thread(target=myfunc, args=(q,))
        thread.start()

这部分代码正在从程序的标准输出中读取。当我在线程外执行

myfunc
时,它就可以工作了!但是当我在线程中执行它时...... 有什么建议吗?

python
10个回答
114
投票

"Segmentation fault (core dumped)"
是当程序以
SIGSEGV
信号退出并且您启用了核心创建时 Linux 打印的字符串。这意味着某些程序已崩溃。

如果您确实在运行 Python 时遇到此错误,则意味着 Python 解释器已崩溃。发生这种情况的原因只有几个:

  1. 您正在使用用 C 编写的第三方扩展模块,并且该扩展模块已崩溃。

  2. 您(直接或间接)使用内置模块

    ctypes
    ,并调用崩溃的外部代码。

  3. 您的Python安装有问题。

  4. 您发现了 Python 中的一个错误,您应该报告该错误。

第一种是迄今为止最常见的。如果您的

q
是某个第三方扩展模块中某个对象的实例,您可能需要查看文档。

通常,当 C 模块崩溃时,这是因为您正在执行无效的操作,或者至少是不常见且未经测试的操作。但从这个意义上来说,这是否是你的“错”——那并不重要。该模块“应该”引发一个可以调试的 Python 异常,而不是崩溃。因此,您可能应该向编写该扩展的人报告错误。但与此同时,您不需要等待 6 个月才能修复错误并发布新版本,而是需要弄清楚您做了什么触发了崩溃,以及是否有其他方法可以实现您想要的功能。或者切换到不同的库。 另一方面,由于您正在从其他地方读取和打印数据,因此您的 Python 解释器可能只是读取了行

"Segmentation fault (core dumped)"

并忠实地打印了它所读取的内容。在这种情况下,上游的其他一些程序可能崩溃了。 (甚至可能没有人崩溃 - 如果您从网络获取此页面并将其打印出来,您会得到相同的行,对吗?)在您的情况下,根据您的评论,可能是 Java 程序崩溃了。


如果你不确定它是哪种情况(并且今天不想学习如何进行进程管理、核心文件检查或 C 级调试),有一个简单的测试方法:在

print line

之后添加一行写着

print "And I'm OK"
。如果您在
Segmentation fault
行之后看到,那么 Python 没有崩溃,而是其他人崩溃了。如果您没有看到它,那么可能是 Python 崩溃了。
    


82
投票

您可能正在处理大量数据,并且您的 RAM 已满
  • 这可能不适用于这种情况,但它也会引发相同的错误,并且由于这个问题出现在这个错误的顶部,所以我在这里添加了这个答案。


25
投票
https://stackoverflow.com/a/58825725/2160809

以及Karuhanga的评论中 import faulthandler faulthandler.enable() // bad code goes here

$ python3 -q -X faulthandler >>> /// bad cod goes here



5
投票
激活 virtualenv

我在错误的 virtualenv 中安装了“pip install example”


3
投票

分段错误(核心转储)错误

from openpyxl import load_workbook import mysql.connector

解决方案

import mysql.connector from openpyxl import load_workbook



2
投票
“(核心转储)python”时都会出现此页面

那么我可能会分享导致此错误的常见问题。 OpenCV cv2.imshow() sometimes raises this error on servers without graphical interfaces.

希望我有帮助。祝你有美好的一天!


1
投票


0
投票


0
投票

https://linuxhint.com/increase-swap-space-linux/


0
投票

第1步:安装memtest86+

sudo apt update sudo apt -y install memtest86+

第2步:重启并按Esc键进入启动菜单。

第三步:选择memtest86,等待结果。

如果测试结果显示错误,请尝试更换RAM插槽或更换RAM。

希望你能尽快解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.