52

私は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で実行すると...何か提案はありますか?

4

7 に答える 7

98

"Segmentation fault (core dumped)"SIGSEGVプログラムがシグナルとともに終了し、コア作成が有効になっている場合にLinuxが出力する文字列です。これは、一部のプログラムがクラッシュしたことを意味します。

Pythonの実行で実際にこのエラーが発生する場合は、Pythonインタープリターがクラッシュしたことを意味します。これが発生する理由はいくつかあります。

  1. Cで記述されたサードパーティの拡張モジュールを使用していて、その拡張モジュールがクラッシュしました。

  2. 組み込みモジュールを(直接的または間接的に)使用していてctypes、クラッシュする外部コードを呼び出しています。

  3. Pythonのインストールに問題があります。

  4. 報告する必要のあるPythonのバグを発見しました。

最初のものは断然最も一般的です。がサードパーティの拡張モジュールのオブジェクトのインスタンスである場合qは、ドキュメントを参照することをお勧めします。

多くの場合、Cモジュールがクラッシュするのは、無効なことをしている、または少なくとも珍しく、テストされていないことが原因です。しかし、それがその意味でのあなたの「過失」であるかどうかは関係ありません。モジュール、クラッシュするのではなく、デバッグできるPython例外を発生させる必要があります。したがって、拡張機能を作成した人にはおそらくバグを報告する必要があります。ただし、その間、バグが修正されて新しいバージョンがリリースされるまで6か月待つのではなく、クラッシュのきっかけとなった原因と、やりたいことを行うための別の方法があるかどうかを把握する必要があります。または、別のライブラリに切り替えます。

一方、他の場所からデータを読み取って印刷しているため、Pythonインタープリターがその行を読み取って、読み取った"Segmentation fault (core dumped)"内容を忠実に印刷した可能性があります。その場合、アップストリームの他のプログラムがクラッシュした可能性があります。(誰もクラッシュしなかった可能性もあります。このページをWebからフェッチして印刷すると、同じ行が表示されますよね?)あなたのコメントに基づくと、クラッシュしたのはおそらくJavaプログラムです。

どちらの場合かわからない場合(そして、今日、プロセス管理、コアファイル検査、または経営幹部レベルのデバッグを行う方法を学びたくない場合)、テストする簡単な方法がありprint lineますprint "And I'm OK"。行の後にそれが表示された場合Segmentation fault、Pythonはクラッシュしませんでしたが、他の誰かがクラッシュしました。表示されない場合は、クラッシュしたのはおそらくPythonです。

于 2012-11-30T23:06:51.460 に答える
75

私が失敗したときに私が知ったそのような失敗のもう一つの理由があります

  • 大量のデータを処理していて、RAMがいっぱいになっている可能性があります

これはこの場合には当てはまらないかもしれませんが、同じエラーがスローされます。このエラーの一番上にこの質問が表示されるので、ここにこの回答を追加しました。

于 2015-06-25T10:56:37.310 に答える
10

ここhttps://stackoverflow.com/a/58825725/2160809とKaruhangaのコメントで言及されているように、問題の原因となっている行またはライブラリを特定するために、faulthandlerを試す価値があります。

import faulthandler


faulthandler.enable()
// bad code goes here

また

$ python3 -q -X faulthandler
>>> /// bad cod goes here
于 2020-02-26T12:59:30.803 に答える
5

私の場合:virtualenvをアクティブ化するのを忘れました

間違ったvirtualenvに「pipinstallexample」をインストールしました

于 2019-05-02T14:02:19.393 に答える
1

私の場合、モジュールwichがdb Mysqlで動作する前に、pyxlsdモジュールをインポートしました。Mysqlモジュールを最初に(コードの上部に)配置した後、それは時計のように機能するようになりました。名前空間の問題があったと思います。

于 2019-02-12T19:50:17.297 に答える
1

質問とは少し関係ありませんが、 「(コアダンプされた)python」を検索するたびにこのページが表示されるため、このエラーの原因となる一般的な問題を共有する可能性があります。

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

私が助けてくれたことを願っています。良い一日を過ごしてください!

于 2021-05-12T21:45:30.837 に答える
1

私の場合、mysql.connectorをインポートする前にopenpyxlからload_workbookをインポートしていました。順序を切り替えるだけで、再び機能し始めました。

セグメンテーション違反(コアダンプ)エラー

from openpyxl import load_workbook
import mysql.connector

解決

import mysql.connector
from openpyxl import load_workbook
于 2021-10-14T19:42:38.150 に答える