Error: Fallo de segmentación (núcleo volcado)

Soy nuevo en python y estoy recibiendo un error extraño:

Segmentation fault (core dumped) 

Cuando ejecuto el siguiente código:

  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() 

Esta parte del código se lee desde la salida estándar de un progtwig. ¡Cuando ejecuto myfunc fuera del hilo, funciona! Pero cuando lo ejecuto en el hilo fais … ¿Alguna sugerencia?

"Segmentation fault (core dumped)" es la cadena que Linux imprime cuando existe un progtwig con una señal SIGSEGV y usted tiene habilitada la creación del núcleo. Esto significa que algún progtwig se ha estrellado.

Si realmente está obteniendo este error al ejecutar Python, esto significa que el intérprete de Python se ha bloqueado. Solo hay algunas razones por las que esto puede suceder:

  1. Está utilizando un módulo de extensión de terceros escrito en C, y ese módulo de extensión se ha bloqueado.

  2. Está (directa o indirectamente) utilizando los ctypes módulo ctypes y llamando al código externo que falla.

  3. Hay algo mal con su instalación de Python.

  4. Has descubierto un error en Python que deberías informar.

El primero es, con mucho, el más común. Si su q es una instancia de algún objeto de un módulo de extensión de terceros, es posible que desee consultar la documentación.

A menudo, cuando los módulos C se bloquean, es porque estás haciendo algo que no es válido, o al menos no es común y no ha sido probado. Pero si es tu “culpa” en ese sentido o no, no importa. El módulo debería generar una excepción de Python que pueda depurar, en lugar de bloquearse. Por lo tanto, probablemente debería informar un error a quien haya escrito la extensión. Pero mientras tanto, en lugar de esperar 6 meses para que se solucione el error y salga una nueva versión, debe averiguar qué fue lo que hizo que se desencadenó la falla y si hay alguna manera diferente de hacer lo que quiere. O cambiar a una biblioteca diferente.

Por otro lado, dado que está leyendo e imprimiendo datos de otro lugar, es posible que su intérprete de Python simplemente lea la línea "Segmentation fault (core dumped)" e imprima fielmente lo que leyó. En ese caso, algún otro progtwig stream arriba probablemente se estrelló. (Incluso es posible que nadie se bloquee; si obtuvieras esta página de la web y la imprimieras, obtendrías la misma línea, ¿no?) En tu caso, según tu comentario, es probable que el progtwig Java se haya bloqueado.

Si no está seguro de cuál es el caso (y no desea aprender cómo realizar la gestión de procesos, la inspección de archivos de núcleo o la depuración de nivel C hoy), hay una manera fácil de probar: después de print line agregue una línea diciendo print "And I'm OK" . Si ve eso después de la línea de Segmentation fault , entonces Python no se bloqueó, alguien más lo hizo. Si no lo ves, entonces es probable que Python se haya estrellado.

Hay una razón más para tal fracaso que llegué a saber cuando el mío falló

  • Podría estar trabajando con muchos datos y su RAM está llena

Esto podría no aplicarse en este caso, pero también arroja el mismo error

En mi caso, importé el módulo pyxlsd antes del módulo que funciona con db Mysql. Después de que puse el módulo Mysql primero (código superior) se volvió a trabajar como un reloj. Creo que hubo algún problema de espacio de nombres.

Basado en uno de los comentarios encontrados en este post:

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

Haz lo siguiente:

eliminando python-librabbitmq

  sudo apt-get remove python-librabbitmq 

instalar librabbitmq

 sudo pip install librabbitmq