Вот код, который загружает одну и ту же страницу 10 раз:память QWebView (в кэше) Управление
app = QApplication([])
event = threading.Event()
def load(url):
def _load_finished(ok):
event.set()
web_view = QWebView()
web_view.loadFinished.connect(_load_finished)
event.clear()
web_view.setUrl(QUrl(url));
while not event.wait(.05): app.processEvents()
web_view.loadFinished.disconnect(_load_finished)
return web_view.page().mainFrame().documentElement()
QWebSettings.setMaximumPagesInCache(0)
QWebSettings.setObjectCacheCapacities(0, 0, 0)
if __name__ == '__main__':
for i in range(10):
load('http://www.huffingtonpost.com/')
QWebSettings.clearMemoryCaches()
QWebSettings.clearIconDatabase()
print(i)
app.exec_()
А вот снимок Process Explorer, после того, как 7-й загрузки:
На 10-й загрузке память достигает 270 МБ. Это нормально? Как это исправить?
Как ни странно, в зависимости от адреса, потребление может колебаться, но при этом оставаться ниже определенного порога (здесь это 90MB):
Спасибо за вопрос и ответ. Можно ли получить доступ к объекту web_view из основного интерпретатора (чтобы добавить его в макет)? – user3479125
@ user3479125, «основной интерпретатор» == главная программа? Если это так, то я думаю, что нет, потому что 'code' работает в отдельном процессе (через' Popen'). Однако вы можете вернуть содержимое страницы дочернего процесса, распечатав его (содержимое) в консоли. После выхода дочернего процесса содержимое будет храниться в 'out'. Кроме того, кажется, что весь QtWebKit заменяется на [QtWebEngine] (http://doc.qt.io/qt-5/qt5-intro.html#web-engine-and-html5). Я не пробовал, но, возможно, нет проблем с потреблением памяти. – AlexP