Python PyQt5:QApplication获得越来越多的QTIMER
我使用PyQt5在Python3.4中构建的应用程序中产生了一种奇怪的效果(如果需要的话,还可以使用asyncio和)。该程序会定期执行一些操作,一次使用单独的线程和Python PyQt5:QApplication获得越来越多的QTIMER,python,qt,memory-leaks,Python,Qt,Memory Leaks,我使用PyQt5在Python3.4中构建的应用程序中产生了一种奇怪的效果(如果需要的话,还可以使用asyncio和)。该程序会定期执行一些操作,一次使用单独的线程和time.sleep(),一次使用asyncio协同程序和asyncio.sleep()。现在,只要一个或两个周期性操作都启动,应用程序的内存消耗就会稳步增加。通过使用objgraph模块和一些调试,我发现有很多QTimer对象生成并添加到主QApplication对象中(如果objgraph.show_backrefs()正确,则
time.sleep()
,一次使用asyncio协同程序和asyncio.sleep()
。现在,只要一个或两个周期性操作都启动,应用程序的内存消耗就会稳步增加。通过使用objgraph模块和一些调试,我发现有很多QTimer
对象生成并添加到主QApplication
对象中(如果objgraph.show_backrefs()
正确,则不会被任何其他对象引用)。在直接检查QApplication对象的子对象时,我也可以看到这一点:
from PyQt5.QtCore import *
app = QCoreApplication.instance()
len(app.children())
Out[3]: 7627
len(app.children())
Out[4]: 8127
app.children()[0:10]
Out[5]:
[<PyQt5.QtCore.QAbstractEventDispatcher at 0x6155670>,
<PyQt5.QtGui.QSessionManager at 0x61556c0>,
<PyQt5.QtWidgets.QCommonStyle at 0x6155760>,
<PyQt5.QtCore.QTimer at 0x53a35d0>,
<PyQt5.QtCore.QTimer at 0x53a3580>,
<PyQt5.QtCore.QTimer at 0x53a36c0>,
<PyQt5.QtCore.QObject at 0x61557b0>,
<PyQt5.QtCore.QTimer at 0x53bbd50>,
<PyQt5.QtCore.QTimer at 0x53bbda0>,
<PyQt5.QtCore.QTimer at 0x6a81080>]
然后内存不会被释放,但消耗不会进一步增加。否则,应用程序似乎仍能正常工作。打开和关闭某些窗口后,将恢复原始行为,即生成新计时器,内存消耗增加。在何处/如何进行更多调试以查找此问题的原因
欢迎任何提示
问候,,
菲利普
for t in filter(lambda o: isinstance(o, QTimer), app.children()):
t.setParent(None)