Ошибка: ошибка сегментации (ядро сброшено)

Я новичок в 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... Любое предложение?

10 ответов

Решение

"Segmentation fault (core dumped)" строка, которую печатает linux, когда программа существует с SIGSEGV сигнал и у вас включено создание ядра. Это означает, что какая-то программа потерпела крах.

Если вы на самом деле получаете эту ошибку при запуске 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.

Есть еще одна причина такой неудачи, о которой я узнал, когда моя вышла из строя

  • Возможно, вы работаете с большим количеством данных, и ваша память заполнена

Это может не применяться в этом случае, но также выдает ту же ошибку

Стоит попробовать обработчик ошибок, чтобы определить строку или библиотеку, вызывающую проблему, как указано здесь /questions/44131348/kak-otladit-oshibku-segmentatsii-python/55370304#55370304 и в комментариях Каруханги

faulthandler.enable()
// bad code goes here

или

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

В моем случае: я забыл активировать virtualenv

Я установил "пример установки pip" в неправильном virtualenv

В моем случае я импортировал load_workbook из openpyxl перед импортом mysql.connector. Я просто меняю порядок, и он снова начинает работать.

Ошибка сегментации (дамп ядра) ошибка

      from openpyxl import load_workbook
import mysql.connector

Решение

      import mysql.connector
from openpyxl import load_workbook

Скорее не имеет отношения к вопросу, но поскольку эта страница появляется всякий раз, когда вы выполняете поиск «(core dumped) python», я могу разделить общую проблему, которая вызывает эту ошибку.

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

Надеюсь, я помог. Хорошего дня!

В моем случае я импортировал модуль pyxlsd до модуля, который работает с БД Mysql. После того, как я сначала поставил модуль Mysql (верхний в коде), он стал работать как часы. Думаю, была проблема с пространством имен.

Я столкнулся с той же проблемой при использовании Python и Pytorch. Проблема в моем случае была в старых КПП. Из-за старых контрольных точек Pytorch не мог загружать или создавать новые графики. После удаления старых чекпоинтов проблема решилась.

Увеличение объема подкачки памяти на моем компьютере решило эту проблему.

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

Основываясь на одном из комментариев, найденных на этом посте:

https://bugs.launchpad.net/ubuntu/+source/python-librabbitmq/+bug/1353269

сделайте следующее:

удаление python-librabbitmq

 sudo apt-get remove python-librabbitmq

установить librabbitmq

sudo pip install librabbitmq
Другие вопросы по тегам