QtWebKit进程的内存大小随着每个新页面加载而增加。清理内存缓存没有帮助。有谁知道如何解决它?
这个简单的例子经过一段时间的操作后崩溃了:
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebKitWidgets import QWebView
from PyQt5.QtWebKit import QWebSettings
class Crawler(QWebView):
def __init__(self):
QWebView.__init__(self)
self.settings().setMaximumPagesInCache(0)
self.settings().setObjectCacheCapacities(0, 0, 0)
self.settings().setOfflineStorageDefaultQuota(0)
self.settings().setOfflineWebApplicationCacheQuota(0)
self.settings().setAttribute(QWebSettings.AutoLoadImages, False)
self.loadFinished.connect(self._result_available)
def start(self):
self.load(QUrl('http://stackoverflow.com/'))
def _result_available(self, ok):
print('got it!')
self.settings().clearMemoryCaches() # it doesn't help
self.settings().clearIconDatabase()
self.start() # next try
if __name__ == '__main__':
app = QApplication([])
crawler = Crawler()
crawler.start()
app.exec_()
答案 0 :(得分:6)
禁用自动加载图像时内存泄漏的原因。它是bug,将在下一个QT版本中修复。删除此行可解决上述问题:
self.settings().setAttribute(QWebSettings.AutoLoadImages, False)
导致泄密的第二个可能原因是"Memory leak in GStreamer"。它正在进行中。
更新:
我看到人们仍在寻找解决方案。我最近发现在版本Qt 5.2.1和Qt 5.3 RC中没有修复AutoLoadImages = False的错误。 New discussion about it has been opened.您可以在bugtracker中为此问题投票,以增加Qt 5.3.0中的修复机会