Подтвердить что ты не робот

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

Im новый в 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()

Эта часть кода читается из программы stdout. Когда я выполняю myfunc из потока, он работает! Но когда я выполняю его в потоке fais... Любое предложение?

4b9b3361

Ответ 1

"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.

Ответ 2

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

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

В этом случае это может не примениться, но также вызывает такую ​​же ошибку

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

выполните следующие действия:

удаление python-librabbitmq

 sudo apt-get remove python-librabbitmq

установить librabbitmq

sudo pip install librabbitmq