Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt:使用QApplication.quit时偶尔出现SEGFULTS_Python_Qt_Segmentation Fault_Pyqt_Qtnetwork - Fatal编程技术网

Python PyQt:使用QApplication.quit时偶尔出现SEGFULTS

Python PyQt:使用QApplication.quit时偶尔出现SEGFULTS,python,qt,segmentation-fault,pyqt,qtnetwork,Python,Qt,Segmentation Fault,Pyqt,Qtnetwork,注意:我也在PyQt邮件列表上发布了这篇文章——如果有好的答案,我会在这里回答我自己的问题 我在执行时遇到了偶尔的SEGFULT问题 QApplication.quit(),可能与libQt5Network.so和/或 QtWebkit 首先,我使用的3个测试系统: ArchLinux、PyQt5.2、Qt5.2.0、Python 3.3.3 虚拟机中的Ubuntu 13.10、PyQt 5.0.1、Qt 5.0.2、Python 3.3.2 Windows7、PyQt5.2、Qt5.2.0、

注意:我也在PyQt邮件列表上发布了这篇文章——如果有好的答案,我会在这里回答我自己的问题

我在执行时遇到了偶尔的SEGFULT问题
QApplication.quit()
,可能与libQt5Network.so和/或 QtWebkit

首先,我使用的3个测试系统:

  • ArchLinux、PyQt5.2、Qt5.2.0、Python 3.3.3
  • 虚拟机中的Ubuntu 13.10、PyQt 5.0.1、Qt 5.0.2、Python 3.3.2
  • Windows7、PyQt5.2、Qt5.2.0、Python 3.3.3
到目前为止,我从未在Arch上发生过这种碰撞,在Arch上经常发生 Ubuntu,并不时在Windows中使用。(虽然Windows只是一个 我猜,我刚刚知道这个python.exe不再工作了(foo)

原始崩溃 我第一次注意到这个问题是在一个大型(ger)项目中, 当我输入
:quit
(在Ubuntu上)时,它给了我这个堆栈跟踪:

这给了我一个非常相似的stacktrace(在Ubuntu上):

QCoreApplication::postEvent(QObject*,QEvent*,int)中的0 0xb6cfd8d2 来自/usr/lib/i386 linux gnu/libQt5Core.so.5 #QMetaObject::activate(QObject*,int,int,void**)中的1 0xb6d21c83 来自/usr/lib/i386 linux gnu/libQt5Core.so.5 #2/usr/lib/i386 linux gnu/libQt5Core.so.5中QMetaObject::activate(QObject*,QMetaObject const*,int,void**)中的0xb6d2248b #3 0xb3e47935英寸??()来自/usr/lib/i386 linux gnu/libQt5Network.so.5 #4 0xb3dcf687英寸??()来自/usr/lib/i386 linux gnu/libQt5Network.so.5 #5 0xb3e483b3英寸??()来自/usr/lib/i386 linux gnu/libQt5Network.so.5 #QMetaObject::activate(QObject*,int,int,void**)中的6 0xb6d21f10 来自/usr/lib/i386 linux gnu/libQt5Core.so.5 #7/usr/lib/i386 linux gnu/libQt5Core.so.5中QMetaObject::activate(QObject*,QMetaObject const*,int,void**)中的0xb6d2248b #8 0xb3e43fe5英寸??()来自/usr/lib/i386 linux gnu/libQt5Network.so.5 #9 0xb3d93b1e英寸??()来自/usr/lib/i386 linux gnu/libQt5Network.so.5 #10 0xb3d94630英寸??()来自/usr/lib/i386 linux gnu/libQt5Network.so.5 #11 0xb3d9471b英寸??()来自/usr/lib/i386 linux gnu/libQt5Network.so.5 #QMetaObject::activate(QObject*,int,int,void**)中的12 0xb6d21f10 来自/usr/lib/i386 linux gnu/libQt5Core.so.5 #13/usr/lib/i386 linux gnu/libQt5Core.so.5中QMetaObject::activate(QObject*,QMetaObject const*,int,void**)中的0xb6d2248b #QIODevice::readyRead()中的14 0xb6d8d155() 来自/usr/lib/i386 linux gnu/libQt5Core.so.5 #15 0xb3e09f14英寸??()来自/usr/lib/i386 linux gnu/libQt5Network.so.5 #16 0xb3dfcd99英寸??()来自/usr/lib/i386 linux gnu/libQt5Network.so.5 #17 0xb3e183bb英寸??()来自/usr/lib/i386 linux gnu/libQt5Network.so.5 #QApplicationPrivate::notify_helper(QObject*,QEvent*)中的18 0xb492ba54() 来自/usr/lib/i386 linux gnu/libQt5Widgets.so.5 #QApplication::notify(QObject*,QEvent*)中的19 0xb4930e66 来自/usr/lib/i386 linux gnu/libQt5Widgets.so.5 #sipQApplication::notify(QObject*,QEvent*)中的20 0xb505fe80 来自/usr/lib/python3/dist packages/PyQt5/qtwidts.cpython-33m-i386-linux-gnu.so #QCoreApplication::notifyInternal(QObject*,QEvent*)中的21 0xb6cfb37a() 来自/usr/lib/i386 linux gnu/libQt5Core.so.5 #22 0xb6d45f67英寸??()来自/usr/lib/i386 linux gnu/libQt5Core.so.5 #g_main_context_dispatch()中的23 0xb65f483e 来自/lib/i386 linux-gnu/libglib-2.0.so.0 #24 0xb65f4be8英寸??()来自/lib/i386 linux-gnu/libglib-2.0.so.0 #25 0xb65f4ca8在g_主上下文中_迭代() 来自/lib/i386 linux-gnu/libglib-2.0.so.0 #26/usr/lib/i386 linux gnu/libQt5Core.so.5中QEventDispatcherGlib::processEvents(QFlags)()中的0xb6d4536d #来自/usr/lib/i386 linux gnu/libQt5Core.so.5的QEventLoop::processEvents(QFlags)()中的27 0xb6cf9c06 #QEventLoop::exec(QFlags)()中的28 0xb6cfa014 来自/usr/lib/i386 linux gnu/libQt5Core.so.5 #QThread::exec()中的29 0xb6b5f90b() 来自/usr/lib/i386 linux gnu/libQt5Core.so.5 #来自/usr/lib/i386 linux gnu/libQt5Core.so.5的QThread::run()中的30 0xb6b5f99b #31 0xb6b63a08英寸??()来自/usr/lib/i386 linux gnu/libQt5Core.so.5 #pthread_create.c:311处的start_线程(arg=0xa7812b40)中的32 0xb7798d78 #位于../sysdeps/unix/sysv/linux/i386/clone.S:131的克隆()中的33 0xb76d001e (15MB,gzip)

有人知道那里出了什么问题吗?一些有魔力的东西 垃圾收集方式不对吗?我也试了一些 PyQt4上类似交响曲的变通方法,但事实并非如此 也可以帮忙

*在描述的地方找不到StackOverflow答案-- 基本上将
qtwidts.qApp
设置为之前的
QApplication
实例
运行
exec()
,然后运行到
None

我一直在PyQt/PySide中捕获segfaults。基本上,我发现大多数segfault都可以归咎于库的异步性质(因此也归咎于我们)

对于您的确切示例,您已经将
timeout
信号连接到
quit
方法。这里可能发生的情况是,在超时的情况下,
quit
会被调用,当进程终止时,所有对应用程序对象的引用都会突然失效。但在执行此操作时,QT的事件循环仍在运行,它试图访问它的
QNetworkAccessManager
以发送另一个信号,但对该内存位置的引用已经无效,因此发生了SEGFULT

在这些情况下,需要做的是实现一种关机方法,确保所有操作都已停止,以正确的顺序删除正在使用的QT组件,然后在此时调用allow Exit


我在这里详细介绍了这个主题,包括
QtWebKit
应用程序的安全关机方法:

谢谢!您的教程似乎对将来的其他问题也很有用。如果你有时间,你能看看我的(对于最初的崩溃,而不是最小的例子)看起来是否合理吗?不客气:)
#0  0xb5c296fc in QMutex::lock() () from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#1  0xb3bdd97d in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#2  0xb3bdf0d0 in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#3  0xb3bd4418 in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#4  0xb3bd8b1e in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#5  0xb5dedf10 in QMetaObject::activate(QObject*, int, int, void**) ()
   from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#6  0xb5dee48b in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#7  0xb5e59155 in QIODevice::readyRead() ()
   from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#8  0xb3bb1f14 in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#9  0xb3ba4d99 in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#10 0xb3bc03bb in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#11 0xb6483a54 in QApplicationPrivate::notify_helper(QObject*, QEvent*) ()
   from /usr/lib/i386-linux-gnu/libQt5Widgets.so.5
#12 0xb6488e66 in QApplication::notify(QObject*, QEvent*) ()
   from /usr/lib/i386-linux-gnu/libQt5Widgets.so.5
#13 0xb6bb7e80 in sipQApplication::notify(QObject*, QEvent*) ()
   from /usr/lib/python3/dist-packages/PyQt5/QtWidgets.cpython-33m-i386-linux-gnu.so
#14 0xb5dc737a in QCoreApplication::notifyInternal(QObject*, QEvent*) ()
   from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#15 0xb5e11f67 in ?? () from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#16 0xb5aaf83e in g_main_context_dispatch ()
   from /lib/i386-linux-gnu/libglib-2.0.so.0
#17 0xb5aafbe8 in ?? () from /lib/i386-linux-gnu/libglib-2.0.so.0
#18 0xb5aafca8 in g_main_context_iteration ()
   from /lib/i386-linux-gnu/libglib-2.0.so.0
#19 0xb5e1138f in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#20 0xb5dc5c06 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#21 0xb5dc6014 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) ()
   from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#22 0xb5c2b90b in QThread::exec() ()
   from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#23 0xb5c2b99b in QThread::run() () from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#24 0xb5c2fa08 in ?? () from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#25 0xb7774d78 in start_thread (arg=0xa5314b40) at pthread_create.c:311
#26 0xb76ac01e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:131
#0  0xb6cfd8d2 in QCoreApplication::postEvent(QObject*, QEvent*, int) ()
   from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#1  0xb6d21c83 in QMetaObject::activate(QObject*, int, int, void**) ()
   from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#2  0xb6d2248b in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#3  0xb3e47935 in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#4  0xb3dcf687 in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#5  0xb3e483b3 in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#6  0xb6d21f10 in QMetaObject::activate(QObject*, int, int, void**) ()
   from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#7  0xb6d2248b in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#8  0xb3e43fe5 in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#9  0xb3d93b1e in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#10 0xb3d94630 in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#11 0xb3d9471b in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#12 0xb6d21f10 in QMetaObject::activate(QObject*, int, int, void**) ()
   from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#13 0xb6d2248b in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#14 0xb6d8d155 in QIODevice::readyRead() ()
   from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#15 0xb3e09f14 in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#16 0xb3dfcd99 in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#17 0xb3e183bb in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#18 0xb492ba54 in QApplicationPrivate::notify_helper(QObject*, QEvent*) ()
   from /usr/lib/i386-linux-gnu/libQt5Widgets.so.5
#19 0xb4930e66 in QApplication::notify(QObject*, QEvent*) ()
   from /usr/lib/i386-linux-gnu/libQt5Widgets.so.5
#20 0xb505fe80 in sipQApplication::notify(QObject*, QEvent*) ()
   from /usr/lib/python3/dist-packages/PyQt5/QtWidgets.cpython-33m-i386-linux-gnu.so
#21 0xb6cfb37a in QCoreApplication::notifyInternal(QObject*, QEvent*) ()
   from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#22 0xb6d45f67 in ?? () from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#23 0xb65f483e in g_main_context_dispatch ()
   from /lib/i386-linux-gnu/libglib-2.0.so.0
#24 0xb65f4be8 in ?? () from /lib/i386-linux-gnu/libglib-2.0.so.0
#25 0xb65f4ca8 in g_main_context_iteration ()
   from /lib/i386-linux-gnu/libglib-2.0.so.0
#26 0xb6d4536d in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#27 0xb6cf9c06 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#28 0xb6cfa014 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) ()
   from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#29 0xb6b5f90b in QThread::exec() ()
   from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#30 0xb6b5f99b in QThread::run() () from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#31 0xb6b63a08 in ?? () from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#32 0xb7798d78 in start_thread (arg=0xa7812b40) at pthread_create.c:311
#33 0xb76d001e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:131