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 PyQt5:QApplication获得越来越多的QTIMER_Python_Qt_Memory Leaks - Fatal编程技术网

Python PyQt5:QApplication获得越来越多的QTIMER

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()正确,则

我使用PyQt5在Python3.4中构建的应用程序中产生了一种奇怪的效果(如果需要的话,还可以使用asyncio和)。该程序会定期执行一些操作,一次使用单独的线程和
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)