У меня есть одностраничное приложение с одной базой, которое нужно работать в течение нескольких часов, перемещаясь по разным маршрутам. Я создал простой скрипт на python, который запускает мой браузер и на весь экран.Утечка памяти Python WebkitGTK (функция очистки)
import sys
from gi.repository import Gtk, Gdk, WebKit
class BrowserWindow(Gtk.Window):
def __init__(self, *args, **kwargs):
super(BrowserWindow, self).__init__(*args, **kwargs)
self.connect("destroy", Gtk.main_quit)
self.webview = WebKit.WebView()
self.webview.connect("load-finished", self._load_finish)
self.webview.connect("navigation-requested", self._navigation_requested)
settings = self.webview.get_settings()
print settings.get_property("enable-page-cache")
settings.set_property("enable-page-cache", False)
self.webview.set_settings(settings)
self.webview.load_uri("http://www.google.com/")
self.add(self.webview)
self.show_all()
def _load_finish(self, view, frame):
print "Loading completed"
print view
def _navigation_requested(self, view, frame, request):
print "Mavigation change requested"
self.webview.get_back_forward_list().clear()
return False
def main():
Gtk.init(sys.argv)
window = BrowserWindow()
window.show()
window.fullscreen()
Gtk.main()
if __name__ == "__main__":
main()
Проблема в том, что каждый раз, когда она меняет маршруты, она увеличивает объем памяти на некоторую величину. Те, у которых больше изображений, быстрее увеличивают память. И вместо того, чтобы использовать что-либо, что в памяти, оно имеет тенденцию использовать больше памяти, но не использовать его.
Я попытался найти четкую функцию, но не получил никакой помощи. Я также пробовал QTWebkit, который имел четкую функцию, но это тоже не помогло.
Какие ** конкретные ** версии webkit вы пробовали? Всегда были проблемы с использованием памяти, но некоторые из них были исправлены в более поздних версиях. – ekhumoro
Также обратите внимание, что GTK на MS Windows имеет утечку памяти при каждом изменении виджетов (см. [Здесь] (http://stackoverflow.com/questions/10837776/memory-leak-in-gtk-under-windows-7-in- gtk-widget-queue-draw) и [здесь] (https://bugzilla.gnome.org/show_bug.cgi?id=685959)). Текущая версия Windows PyGTK не обновлена ** исправлением. Если вы работаете с окнами, единственный способ избежать утечки памяти - это создать PyGTK из исходной версии с использованием последней версии GTK. Тем не менее, могут возникнуть проблемы с webkit, как отмечает ekhumoro. –
Я использую PyQT4 и/или PyWebkitGTK. Я на Debian/XFCE4 с ограниченным объемом памяти. – Techjail