【问题标题】:Error: Segmentation fault (core dumped)错误:分段错误(核心转储)
【发布时间】:2012-11-19 05:14:58
【问题描述】:

我是 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 时它可以工作!但是当我在线程fais中执行它时...... 有什么建议吗?

【问题讨论】:

  • 上面代码中的q是什么?
  • @JasonSperske:是的,但问题是哪个——如果是queue.Queue,可能是Python配置问题,最好的解决办法是卸载重装Python ;如果是foomodule.Queue,则很可能是foo 库中的错误。
  • PS,@karensantana:什么 Python 版本,什么平台?
  • 我有一个队列类:q = Queue()

标签: python


【解决方案1】:

值得尝试使用 faulthandler 来识别导致问题的行或库,如此处https://stackoverflow.com/a/58825725/2160809 和 Karuhanga 的 cmets 中提到的那样

import faulthandler


faulthandler.enable()
// bad code goes here

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

【讨论】:

  • 确实如此。 Actually, I'm impress of why the elected answer didn't include this.多谢兄弟 :)。你今天救了一条命。
  • 很高兴这有帮助:)
  • 看看,CookieMonster:doadm-notes.blogspot.com/2020/08/…
  • 哦,太好了:)
【解决方案2】:

在我的例子中,我在导入 mysql.connector 之前从 openpyxl 导入 load_workbook。我只是切换了顺序,它又开始工作了。

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

from openpyxl import load_workbook
import mysql.connector

解决方案

import mysql.connector
from openpyxl import load_workbook

【讨论】:

    【解决方案3】:

    与问题无关,但由于每当您搜索 "(core dumped) python" 时都会出现此页面,因此我可能会分享一个导致此错误的常见问题。

    OpenCV cv2.imshow() sometimes raises this error on servers without graphical interfaces.
    

    希望我能帮上忙。祝你有美好的一天!

    【讨论】:

      【解决方案4】:

      这种失败还有一个原因,当我失败时我才知道

      • 您可能正在处理大量数据并且您的 RAM 已满

      这可能不适用于这种情况,但它也会引发相同的错误,并且由于这个问题出现在这个错误的最前面,所以我在这里添加了这个答案。

      【讨论】:

      • 谢谢。我正在运行 8 个线程,想知道为什么会出现此错误。
      • 有效点,运行 8 个线程并在 python dict 中每秒生成 4000 个数据条目,对我的程序执行了此操作。
      【解决方案5】:

      "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 级调试),有一个简单的测试方法:@987654327 之后@ 添加一行 print "And I'm OK"。如果您在Segmentation fault 行之后看到它,那么 Python 并没有崩溃,而是其他人崩溃了。如果你没有看到,那么很可能是 Python 崩溃了。

      【讨论】:

      • 我正在读取一个用java编写的程序的标准输出......这意味着这段代码已经崩溃了?
      • 没有。很可能是您的 Queue 模块从我收集的内容中崩溃了。
      • 等一下……您的 Python 可执行文件是否因Segmentation fault (core dumped) 而崩溃,还是只是打印了"Segmentation fault (core dumped)" 行?如果是后一种情况,那么是的,这意味着您的 Java 程序崩溃了。让我编辑答案。
      • @abarnert 你有什么建议?我必须再次安装python吗?新版本的python?另一个图书馆?
      • Python 3 现在带有一个有用的实用程序,可以帮助您追踪问题可能出在哪里docs.python.org/3/library/faulthandler.html
      【解决方案6】:

      就我而言:我忘了激活 virtualenv

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

      【讨论】:

      【解决方案7】:

      在我的情况下,我在模块与 db Mysql 一起使用之前导入了 pyxlsd 模块。 在我确实将 Mysql 模块放在首位(代码中的上部)之后,它就变得像时钟一样工作了。 认为存在一些命名空间问题。

      【讨论】:

        猜你喜欢
        • 2014-08-04
        • 1970-01-01
        • 2015-06-25
        • 2021-06-03
        相关资源
        最近更新 更多