我有一个挂起的PyQt应用程序。在PyQt应用程序中挂起的可能原因?
Qt的4.7.4(64位) 的Python 2.6.1 GCC 4.2.1 OSX 10.6.8
的悬挂的位置而变化。如果我禁用/重写一个挂起位置,挂起很快会在其他地方发生。
该应用程序执行的搜索可能返回数以千计的自定义数据对象,每个对象可能包含50个子对象。
记录显示挂起倾向于在创建这些自定义对象的循环中发生。
ALSO
应用程序使用线程,但是当我禁用这些线程挂起,甚至发生。 (我使用Laszlo Nagy's stack trace tool来验证这一点,即使只有主线程和堆栈跟踪程序线程正在运行,挂起也会发生。)
应用程序读取并创建图像文件。 I/O锁似乎不太可能是罪魁祸首,但我还没有排除。
不知
是否有Python对象我可以创建的数量限制吗?
有没有其他的限制,我可能会达到?
我没有做任何显式的对象删除垃圾收集。我是不是该?
有没有其他常见的嫌疑犯?
EDIT(8/13):
QTimer.singleShot是很好的了解和引热议 - 然而,这应用程序不使用singleShot。
当应用程序挂起,它声称100%的CPU(约140 MB的内存。)
我会尽快尝试strace的,看看它揭示。
尝试使用'strace'运行你的程序,它显示你的程序所做的系统调用。这应该使您能够在发生阻塞系统调用时看到挂起。 – Giel 2012-08-03 21:01:30
这些搜索和它们返回的数据对象是否可以从界面分离?如果不是,他们应该是。这不会解决问题,但它会使调试变得更容易。 – 2012-08-03 21:31:23
当应用程序“挂起”时,你的内存/ CPU使用情况如何? – cwa 2012-08-04 00:45:19