pycharm 随机发生错误:进程以退出代码 134 完成(被信号 6 中断:SIGABRT)
Posted
技术标签:
【中文标题】pycharm 随机发生错误:进程以退出代码 134 完成(被信号 6 中断:SIGABRT)【英文标题】:pycharm error happening at random time: Process finished with exit code 134 (interrupted by signal 6: SIGABRT) 【发布时间】:2021-12-31 21:51:33 【问题描述】:我正在与 pycharm 社区合作开发一个带有 keras 后端的 tensorflow 模型,有时这个错误会随机出现,特别是在我调用 pyplot 并关闭窗口之后:
Exception ignored in: <bound method Image.__del__ of <tkinter.PhotoImage object at 0x7ff6406fad30>>
Traceback (most recent call last):
File "/usr/lib/python3.6/tkinter/__init__.py", line 3507, in __del__
self.tk.call('image', 'delete', self.name)
RuntimeError: main thread is not in main loop
出现此错误后,我需要关闭python控制台并再次加载我的数据,这很耗时(数据是一个大数据集,内存使用量很大)
我该如何解决这个问题?
更新: 这是情节代码:
import matplotlib
matplotlib.use('TkAgg')
from matplotlib import pyplot as plt
import numpy as np
data = np.ones((256,256))
fig = plt.figure()
ax = fig.add_subplot(111)
temp = np.transpose(data)
plt.title('title')
im = ax.imshow((temp), aspect='auto')
fig.colorbar(im)
plt.axes()
data2 = np.ones((256,256))
fig = plt.figure()
ax = fig.add_subplot(111)
temp = np.transpose(data2)
plt.title('title')
im = ax.imshow((temp), aspect='auto')
fig.colorbar(im)
plt.axes()
更新 2:
我有 PyCharm 2021.2.3(社区版)
build PC-212.5457.59
Runtime version: 11.0.12+7-b1504.40 amd64
我安装了以下软件包:
Package Version
----------------------- -------------------
absl-py 0.9.0
appdirs 1.4.3
apturl 0.5.2
asn1crypto 0.24.0
astor 0.8.1
bleach 2.1.2
Brlapi 0.6.6
certifi 2018.1.18
chardet 3.0.4
command-not-found 0.3
control 0.9.0
cryptography 2.1.4
cupshelpers 1.0
cycler 0.10.0
decorator 4.4.2
defer 1.0.6
distlib 0.3.0
distro-info 0.18ubuntu0.18.04.1
entrypoints 0.2.3.post1
filelock 3.0.12
gast 0.2.2
google-pasta 0.1.8
graphviz 0.14
grpcio 1.27.2
h5py 2.10.0
html5lib 0.999999999
httplib2 0.9.2
idna 2.6
imageio 2.9.0
imageio-ffmpeg 0.4.3
imgviz 1.2.5
importlib-metadata 1.5.0
importlib-resources 1.3.1
ipykernel 4.8.2
ipython 5.5.0
ipython-genutils 0.2.0
ipywidgets 6.0.0
Jinja2 2.10
joblib 0.14.1
jsonschema 2.6.0
jupyter-client 5.2.2
jupyter-core 4.4.0
Keras 2.4.3
Keras-Applications 1.0.8
Keras-Preprocessing 1.1.0
keyring 10.6.0
keyrings.alt 3.0
kiwisolver 1.1.0
labelme 4.5.7
language-selector 0.1
launchpadlib 1.10.6
lazr.restfulclient 0.13.5
lazr.uri 1.0.3
llvmlite 0.34.0
louis 3.5.0
macaroonbakery 1.1.3
Markdown 3.2.1
MarkupSafe 1.0
matplotlib 3.0.3
mistune 0.8.3
moviepy 1.0.3
nbconvert 5.3.1
nbformat 4.4.0
netifaces 0.10.4
networkx 2.5.1
notebook 5.2.2
numba 0.51.2
numpy 1.19.5
oauth 1.0.1
olefile 0.45.1
opt-einsum 3.2.0
pandas 1.0.4
pandocfilters 1.4.2
pexpect 4.2.1
pickleshare 0.7.4
Pillow 5.1.0
pip 20.0.2
proglog 0.1.9
prompt-toolkit 1.0.15
protobuf 3.11.3
pycairo 1.16.2
pycrypto 2.6.1
pycups 1.9.73
pydot 1.4.1
pydot-ng 2.0.0
pydotplus 2.0.2
Pygments 2.2.0
pygobject 3.26.1
pymacaroons 0.13.0
PyNaCl 1.1.2
pyparsing 2.4.6
pyRFC3339 1.0
python-apt 1.6.5+ubuntu0.5
python-dateutil 2.6.1
python-debian 0.1.32
pytz 2018.3
PyWavelets 1.1.1
pyxdg 0.25
PyYAML 3.12
pyzmq 16.0.2
QtPy 1.9.0
reportlab 3.4.0
requests 2.18.4
requests-unixsocket 0.1.5
scikit-image 0.17.2
scikit-learn 0.22.2.post1
scipy 1.4.1
screen-resolution-extra 0.0.0
seaborn 0.11.0
SecretStorage 2.3.1
setuptools 46.0.0
simplegeneric 0.8.1
simplejson 3.13.2
six 1.14.0
sklearn 0.0
system-service 0.3
systemd-python 234
tensorboard 1.14.0
tensorflow-estimator 1.14.0
tensorflow-gpu 1.14.0
termcolor 1.1.0
terminado 0.7
testpath 0.3.1
tifffile 2020.9.3
tornado 4.5.3
tqdm 4.56.2
traitlets 4.3.2
ubuntu-drivers-common 0.0.0
ufw 0.36
unattended-upgrades 0.1
urllib3 1.22
virtualenv 20.0.10
wadllib 1.3.2
wcwidth 0.1.7
webencodings 0.5
Werkzeug 1.0.0
wheel 0.34.2
wrapt 1.12.1
xkit 0.0.0
zipp 3.1.0
zope.interface 4.3.2
【问题讨论】:
显示导致此问题的代码。PyCharm
不是问题,而是您的代码。看起来你在两个threads
中运行tkinter
,但大多数GUIs
不喜欢在头上运行。可能当您关闭窗口时,它会破坏它,但其他线程仍在运行,它会尝试在被破坏的窗口中显示图像。在 tkinter 中销毁主窗口之前,您必须停止线程。
这看起来可能是相关的:***.com/questions/50848127/…
感谢您的提示,但该解决方案对我不起作用。
***.com/questions/14694408/… 好像是这样的
我认为问题与 Tk/Pycharm 交互有关,与 tensorflow 或 keras 无关。尝试将 matplotlib 后端(将 matplotlib.use() 命令的参数更改为“WXAgg”或“Qt5Agg”)更改为 wxPython 或 PyQt(您需要安装框架)
【参考方案1】:
看起来这是 PyCharm 中 Tkinter 积极跟踪问题的一部分。您可以在Pycharm's developer's issue tracker 上找到参考。该问题尚未得到诊断,但如果查看similar problems with Tk on ***,可以看出这是线程安全和/或多线程问题。
我所能做的就是推测原因,这没有帮助,但是,我至少可以整理建议的解决方法:
切换到不同的 Matplotlib 后端(参见文档:What is a backend?)。例如 Qt5,但您需要确保它们在您的环境中可用。
这种方法最有前途,因为其他后端能够更好地处理不是主线程的问题,或者对于多线程来说是明确安全的。这也是最简单的,除非您有一个非常具体的理由偏爱 TkAgg。
不要将调试器用于交互式绘图。
按照链接问题中 PyCharm 开发人员的建议,在调试器中将“变量加载策略”设置为“同步”。
在 Pycharm 中启用“科学模式”。
更深奥的解决方法,例如在绘制第二个之前在代码中关闭您的图形。示例,绘制第一张图后:
# Save out figure if desired, then close
# Assuming not using a blocking draw/show call.
fig.savefig('myfig.png')
plt.close() # Object oriented: fig.close()
根据对原因的推测,可能 PyCharm 的调试器正在将 Tk 踢出主线程,或者在图形仍处于活动或呈现状态时关闭的工作线程中运行它。
最后,还请查看relevant documentation for Matplotlib,因为您的代码示例不遵循他们推荐的使用模式。具体来说,从链接了解面向对象和 pyplot 方法之间的区别。可能,有点不太可能,如果代码坚持使用 Matplotlib 的推荐方法,如他们的教程文档中突出显示的那样,错误可能不会出现。这只是猜测。
我至少建议不要滥用 plt.axes() 作为强制渲染图形的迂回方式。您已经使用面向对象的方法 fig.add_subplot
创建了一个轴,因此您不需要使用 pyplot 创建一个空轴。回想一下,图形可能会占用大量内存,因此,如果您已经因加载数据集而内存不足,您可能会发现更好的性能并通过正确处理图形来避免使用交换,例如在完成时关闭它们,除非需要,否则不要以交互方式呈现它们等。
【讨论】:
以上是关于pycharm 随机发生错误:进程以退出代码 134 完成(被信号 6 中断:SIGABRT)的主要内容,如果未能解决你的问题,请参考以下文章
在 pycharm 上使用 keras-tensorflow 的 3D CNN(进程以退出代码 137 完成(被信号 9:SIGKILL 中断))
Pycharm 无法连接到控制台进程退出代码 -1 远程解释器