Python 错误:分段错误(堆芯转储)

Python 错误:分段错误(堆芯转储),python,Python,我是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

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

“分段错误(内核转储)”
是Linux在程序退出时使用
SIGSEGV
信号打印的字符串,并且您启用了内核创建。这意味着一些程序已经崩溃

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

  • 您使用的是用C编写的第三方扩展模块,该扩展模块已崩溃

  • 您(直接或间接)正在使用内置模块
    ctypes
    ,并调用崩溃的外部代码

  • 您的Python安装有问题

  • 您在Python中发现了一个应该报告的bug

  • 第一种是目前最常见的。如果您的
    q
    是某个第三方扩展模块中某个对象的实例,您可能需要查看文档

    通常,当C模块崩溃时,这是因为您所做的事情是无效的,或者至少是不常见的和未经测试的。但不管这是不是你的“错”,这都无关紧要。模块应该引发一个Python异常,您可以对其进行调试,而不是崩溃。因此,您可能应该向编写扩展的人报告一个bug。但与此同时,你需要弄清楚是什么触发了崩溃,以及是否有其他方式来做你想做的事情,而不是等待6个月的bug修复和新版本发布。或者切换到其他库

    另一方面,由于您正在从其他地方读取和打印数据,因此您的Python解释器可能只是读取了行
    “Segmentation fault(core dumped)”
    ,并忠实地打印它读取的内容。在这种情况下,其他程序可能会崩溃。(甚至有可能没有人崩溃,如果你从网上获取这个页面并打印出来,你会得到同样的一行,对吗?)在你的情况下,根据你的评论,可能是Java程序崩溃了


    如果您不确定是哪种情况(并且今天不想学习如何进行流程管理、核心文件检查或C级调试),有一种简单的测试方法:在
    打印行之后添加一行,说
    print“我很好”
    。如果您看到在
    分段错误
    行之后,Python没有崩溃,其他人崩溃了。如果你看不到它,那么很可能是Python崩溃了。

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

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

    这可能不适用于本例,但它也会引发相同的错误,因为这个问题出现在这个错误的顶部,所以我在这里添加了这个答案。

    在我的例子中,我在模块wich与db Mysql一起工作之前导入了pyxlsd模块。 在我将Mysql模块放在第一位(代码的上部)之后,它开始像时钟一样工作。
    我想可能是名称空间问题。

    在我的例子中:我忘了激活virtualenv


    我在错误的virtualenv中安装了“pip安装示例”

    值得尝试faulthandler来识别引起此问题的行或库,如本文和Karuhanga的评论所述

    faulthandler.enable()
    // bad code goes here
    


    与这个问题稍微无关,但由于每当您搜索(核心转储的)python时都会出现此页面,因此我可能会与您分享一个导致此错误的常见问题

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

    希望我能帮忙。祝你有愉快的一天

    上面代码中的
    q
    是什么?答?@JasonSperske:是的,但问题是如果是
    queue.queue
    ,那可能是Python配置问题,最好的解决方案是卸载并重新安装Python;如果它是
    foomodule.Queue
    ,很可能是
    foo
    library.PS、@karensantana:What Python version,What platform?我有一个队列类:q=Queue(),我正在读取一个用java编写的程序的stdout。。。这意味着此代码已崩溃?不。很可能是您的队列模块从我收集的数据中崩溃。请稍候……您的Python可执行文件是否因
    分段错误(内核转储)
    而崩溃,或者只是打印了一行
    “分段错误(内核转储)”
    ?如果是后一种情况,那么是的,这意味着您的Java程序崩溃了。让我编辑一下答案。@abarnert你的建议是什么?我必须重新安装python吗?python的新版本?另一个库?Python3现在提供了一个有用的实用程序,它可以帮助您跟踪问题的所在。我正在运行8个线程,不知道为什么会出现这个错误。有效的一点是,运行8个线程,并在python dict中每秒生成4000个数据项,这对我的程序造成了影响。如果其他人犯了同样的错误,下面是如何激活它。。。激活虚拟环境您可以通过运行以下命令来激活python环境:Mac OS/Linux
    source/bin/Activate
    Windows
    \Scripts\Activate
    链接:确实如此。事实上,我对为什么民选答案没有包括这一点印象深刻。谢谢兄弟:)。你今天救了一条命。很高兴这有帮助:)看一看,库克怪物:哦,太好了:)
    OpenCV cv2.imshow() sometimes raises this error on servers without graphical interfaces.