Python 错误:分段错误(堆芯转储)
我是python新手,遇到一个奇怪的错误:Python 错误:分段错误(堆芯转储),python,Python,我是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
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
时,它会工作!但是当我在线程中执行它时。。。
有什么建议吗?“分段错误(内核转储)”
是Linux在程序退出时使用SIGSEGV
信号打印的字符串,并且您启用了内核创建。这意味着一些程序已经崩溃
如果您在运行Python时实际遇到此错误,则表示Python解释器已崩溃。发生这种情况的原因只有几个:
ctypes
,并调用崩溃的外部代码q
是某个第三方扩展模块中某个对象的实例,您可能需要查看文档
通常,当C模块崩溃时,这是因为您所做的事情是无效的,或者至少是不常见的和未经测试的。但不管这是不是你的“错”,这都无关紧要。模块应该引发一个Python异常,您可以对其进行调试,而不是崩溃。因此,您可能应该向编写扩展的人报告一个bug。但与此同时,你需要弄清楚是什么触发了崩溃,以及是否有其他方式来做你想做的事情,而不是等待6个月的bug修复和新版本发布。或者切换到其他库
另一方面,由于您正在从其他地方读取和打印数据,因此您的Python解释器可能只是读取了行“Segmentation fault(core dumped)”
,并忠实地打印它读取的内容。在这种情况下,其他程序可能会崩溃。(甚至有可能没有人崩溃,如果你从网上获取这个页面并打印出来,你会得到同样的一行,对吗?)在你的情况下,根据你的评论,可能是Java程序崩溃了
如果您不确定是哪种情况(并且今天不想学习如何进行流程管理、核心文件检查或C级调试),有一种简单的测试方法:在
打印行之后添加一行,说print“我很好”
。如果您看到在分段错误
行之后,Python没有崩溃,其他人崩溃了。如果你看不到它,那么很可能是Python崩溃了。还有一个失败的原因,当我的失败时我才知道
- 您可能正在处理大量数据,并且RAM已满
这可能不适用于本例,但它也会引发相同的错误,因为这个问题出现在这个错误的顶部,所以我在这里添加了这个答案。在我的例子中,我在模块wich与db Mysql一起工作之前导入了pyxlsd模块。
在我将Mysql模块放在第一位(代码的上部)之后,它开始像时钟一样工作。
我想可能是名称空间问题。在我的例子中:我忘了激活virtualenv
我在错误的virtualenv中安装了“pip安装示例”值得尝试faulthandler来识别引起此问题的行或库,如本文和Karuhanga的评论所述
faulthandler.enable()
// bad code goes here
或
与这个问题稍微无关,但由于每当您搜索(核心转储的)python时都会出现此页面,因此我可能会与您分享一个导致此错误的常见问题
OpenCV cv2.imshow() sometimes raises this error on servers without graphical interfaces.
希望我能帮忙。祝你有愉快的一天 上面代码中的q
是什么?答?@JasonSperske:是的,但问题是如果是queue.queue
,那可能是Python配置问题,最好的解决方案是卸载并重新安装Python;如果它是foomodule.Queue
,很可能是foo
library.PS、@karensantana:What Python version,What platform?我有一个队列类:q=Queue(),我正在读取一个用java编写的程序的stdout。。。这意味着此代码已崩溃?不。很可能是您的队列模块从我收集的数据中崩溃。请稍候……您的Python可执行文件是否因分段错误(内核转储)
而崩溃,或者只是打印了一行“分段错误(内核转储)”
?如果是后一种情况,那么是的,这意味着您的Java程序崩溃了。让我编辑一下答案。@abarnert你的建议是什么?我必须重新安装python吗?python的新版本?另一个库?Python3现在提供了一个有用的实用程序,它可以帮助您跟踪问题的所在。我正在运行8个线程,不知道为什么会出现这个错误。有效的一点是,运行8个线程,并在python dict中每秒生成4000个数据项,这对我的程序造成了影响。如果其他人犯了同样的错误,下面是如何激活它。。。激活虚拟环境您可以通过运行以下命令来激活python环境:Mac OS/Linuxsource/bin/Activate
Windows\Scripts\Activate
链接:确实如此。事实上,我对为什么民选答案没有包括这一点印象深刻。谢谢兄弟:)。你今天救了一条命。很高兴这有帮助:)看一看,库克怪物:哦,太好了:)
OpenCV cv2.imshow() sometimes raises this error on servers without graphical interfaces.