Ошибка: ошибка сегментации (ядро сброшено)
Я новичок в 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 потерпел крах. Это может произойти только по нескольким причинам:
Вы используете сторонний модуль расширения, написанный на C, и этот модуль расширения вышел из строя.
Вы (прямо или косвенно) используете встроенный модуль
ctypes
и вызывая внешний код, который вылетает.Что-то не так с вашей установкой Python.
Вы обнаружили ошибку в 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://bugs.launchpad.net/ubuntu/+source/python-librabbitmq/+bug/1353269
сделайте следующее:
удаление python-librabbitmq
sudo apt-get remove python-librabbitmq
установить librabbitmq
sudo pip install librabbitmq