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

kar*_*ana 36 python

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

Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

当我执行以下代码时:

  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()
Run Code Online (Sandbox Code Playgroud)

这部分代码是从程序的stdout中读取的.当我执行 myfunc该线程时,它的工作原理!但是当我在线程中执行它时...任何建议?

aba*_*ert 75

"Segmentation fault (core dumped)"是当程序存在SIGSEGV信号并且启用了核心创建时,linux打印的字符串.这意味着某些程序崩溃了.

如果你真的从运行Python中得到这个错误,这意味着Python解释器崩溃了.这种情况只有几个原因:

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

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

  3. 你的Python安装有问题.

  4. 您发现了Python中应该报告的错误.

第一种是迄今为止最常见的.如果您q是来自某个第三方扩展模块的某个对象的实例,您可能需要查看文档.

通常,当C模块崩溃时,这是因为你正在做一些无效的事情,或者至少是不常见和未经测试的事情.但在这个意义上它是否是你的"错误"并不重要.该模块应该引发一个可以调试的Python异常,而不是崩溃.所以,您应该向编写扩展程序的人报告错误.但与此同时,你需要弄清楚你做了什么才能引发崩溃,而不是等待6个月才能修复bug并推出新版本,以及是否有不同的方式来做你想做的事情.或者切换到其他库.

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

如果您不确定它是哪种情况(并且不想学习如何进行流程管理,核心文件检查或今天的C级调试),那么可以通过一种简单的方法进行测试:print line添加一行后说print "And I'm OK".如果你看到Segmentation fault线后,那么Python没有崩溃,其他人也没有.如果你没有看到它,那么可能是Python崩溃了.

  • Python 3现在附带了一个有用的实用程序,该实用程序在帮助您跟踪问题可能在哪里的方面大有帮助,https://docs.python.org/3/library/faulthandler.html (2认同)

Cyb*_*ova 53

当我失败时,我才知道这种失败的另一个原因

  • 您可能正在使用大量数据并且RAM已满

这可能不适用于这种情况,但它也会引发相同的错误

  • 有效点是,在 python 字典中运行 8 个线程并每秒生成 4000 个数据条目,这对我的程序做到了这一点。 (2认同)

Hoa*_*ell 5

就我而言:我忘了激活 virtualenv

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


coo*_*ter 5

值得尝试faulthandler来识别导致问题的行或库,如此处/sf/answers/4117800781/和Karuhanga的评论中所述

faulthandler.enable()
// bad code goes here
Run Code Online (Sandbox Code Playgroud)

或者

$ python3 -q -X faulthandler
>>> /// bad cod goes here
Run Code Online (Sandbox Code Playgroud)