py2exe: Kriegt man den Speicherverbrauch irgendwie kleiner?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
oliver1974
User
Beiträge: 97
Registriert: Donnerstag 26. Oktober 2006, 15:01

Hallo zusammen,

Bisher verwende ich für meine Python-Apps py2exe mit anschließenden kapseln der Files mittels des Nullsoft - Installers (NSI), um eine schöne Setup.exe für unsere Windows- Benutzer zu erstellen die das Python - Skript dann mit eingebetteten Interpreter installiert...

Klappt ja bekanntlichermaßen auch wirklich wunderbar, ganz klasse....

Was mir etwas auf dem Magen drückt, ist der Speicherverbrauch des so installierten Programms... Ich hab hier ein Mini-Tool, was in der Taskbar vor sich hinläuft.. und ca. satte 16 MB wegzieht.

Da schluck ich schon mal trocken.

Okay, ich weiß.. Das ganze Python-Interpreter-Gerödel muss ja auch laufen, das ist halt der Preis, wenn man in einer interpreterbasierten oder VM-basierten Spache unterwegs ist... Und dazu läuft noch wxPython, das muss ja auch noch reingeladen werden.. (wird das im Taskmanager überhaupt speicherverbrauchsmäßig in den Prozess meine exe-gewrappten Python-Anwendung eingerechnet?)

Ich meine nun mal irgendwie gehört zu haben, dass man es zumindest "etwas" kleiner kriegt.. Aber so richtig finde ich nix dazu, wenn ich nicht geschielt habe beziehen sich die Hinweise auf der py2exe Homepage nur so mehr auf die Frage, wie man die setup.exe klein bekommt.. Und das ist eher für mich überhaupt kein Problem, sondern eher die "exe-fizierte" Python - Anwendung selber?

Hat da jemand Infos drüber?

Danke im voraus!!!
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

oliver1974 hat geschrieben:Was mir etwas auf dem Magen drückt, ist der Speicherverbrauch des so installierten Programms... Ich hab hier ein Mini-Tool, was in der Taskbar vor sich hinläuft.. und ca. satte 16 MB wegzieht. Da schluck ich schon mal trocken.
Hallo oliver!

So ging es mir, als ich meine erste "Visual Basic 6 EXE" mit über 20 MB fertig hatte. Es war aber nicht so schlimm, wie ich es mir dachte. Die Vorteile überwogen.

Genau so ist es mit Python. Die Vorteile überwiegen. Und in deinem Fall wird ja sogar ein GUI-Toolkit geladen. Was sind da schon 16 MB. Wenn ich mein Kassensystem starte, das noch in VB6 programmiert ist, werden auf einen Schlag 60 MB verbraten. Das MSDE (=kleiner MS SQL-Server) nimmt, sobald gearbeitet wird, auch noch um die 100 MB für sich ein. -- Was sind da schon 16 MB.

Ob du es kleiner bekommst? Keine Ahnung. :K

mfg
Gerold
:-)

PS:
- Thunderbird: 56 MB
- Firefox: 30 MB
- Winamp: 20 MB
- ClamTray (=Clam AV): 18 MB
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
sunmountain
User
Beiträge: 89
Registriert: Montag 13. März 2006, 17:18

Der Speicherverbrauch ist nicht immer unbedingt wirklich der verbrauchte
Speicher.

Will sagen:
Ein Programm braucht 20 MB.
Davon sind aber 18 MB shared libraries (so/DLL)
Das eigentliche Programm verbraucht also 2 MB.

Auf Linux Foren führen die Speicherangaben von top regelmäßig
zu wahren Kriegen Ahnungsloser.
oliver1974
User
Beiträge: 97
Registriert: Donnerstag 26. Oktober 2006, 15:01

"Die Vorteile überwiegen..": Nun gut, das denke ich auch..

Trotzdem ist es natürlich irgendwie schon Overkill... ich habe NUR ein TaskBar Icon (wofür ich mir das komplette wxPython reinlade.. na ja, so ist es halt..) und dann ein wirklich simples Python Skript (die ganze Applikation passt wirklich schön lesbar in ein einzelnes File... Na ja, 2 wenn ich das Startskript mitrechne, was das das Skript von Gerold aufruft das prüft, ob bereits eine Instanz des Programmes läuft.. nochmals danke dafür!), und
dafür 16 MB abzwacken, hust........

Es ist mir nicht ganz klar, wieviel davon schon wxPython wegnimmt.. ich bin echt drauf und dran, mir gerade ein simples C-Programm zu stricken die ebenfalls eine wxWidgets GUI implementiert.. vielleicht bin ich ja da schon mal schlauer.

Ich meine aber wirklich gelesen zu haben, dass man irgendwie nicht benötigte Features aus Python irgendwie "herausnehmen" konnte.. und es damit etwas "schlanker" hinbekam. Aber ich bin mir jetzt nicht mehr wirklich sicher, ob das sich wirklich auf die laufende Instanz des Programmes bezog...

(EDIT: @gerold: Ich dachte immer, SW3 wäre in Python implementiert... Quasi so als Vorzeigeanwendung.. :wink: )
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

oliver1974 hat geschrieben:Es ist mir nicht ganz klar, wieviel davon schon wxPython wegnimmt.
Hi oliver!

Python verbraucht unter Windows XP so ca. 4 MB Speicher. Wenn ich dann in der Python-Shell ``import wx`` eingeben, dann wird insgesamt 18 MB verwendet.

Vielleicht kannst du damit etwas anfangen.

http://www.python-forum.de/post-9658.html#9658

Wenn du wirklich nur das Trayicon (unter Windows) brauchst... Allerdings bist du dann auch auf Windows eingeschränkt.

mfg
Gerold
:-)

Edit: SW3 hat jetzt schon über acht Jahre auf dem Buckel. Damals wusste ich noch nichts von Python. Außerdem ist wxPython erst seit "kurzem" programmierbar. Vorher hätte ich mich niemals auf wxPython eingelassen. Allerdings wird SW3 immer mehr von Python durchsetzt. Alles was nicht unbedingt in VB programmiert werden muss, mache ich mit Python und integriere es in SW3.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
oliver1974
User
Beiträge: 97
Registriert: Donnerstag 26. Oktober 2006, 15:01

Danke für den Link, aber das TrayIcon stellt nicht nur etwas dar, sondern über ein Kontextmenü gibt der Benutzer auch durchaus Befehle... Das macht das ganze natürlich etwas komplizierter, aber in wxPython geht das wunderbar!

Dürfte mit win32 "etwas" fummeliger werden.. na ja, kann man sich überlegen.. Ich hab tatsächlich den "Petzold" hier im Bücherschrank stehen (den Schinken von Microsoft Press über die Win32 API), vielleicht schreibt er ja da auch was nettes.....

Ist aber, wie du schon sinngemäß meintest, eine Frage, ob sich das herumexperimentiere deswegen lohnt..... Läuft ja sonst hervorragend...

(Ich kann mich da nur wiederholen: python + wxPython ist mittlerweile eine verdammt schöne Kombination in meinen Augen...)
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

oliver1974 hat geschrieben:Hallo zusammen,
Was mir etwas auf dem Magen drückt, ist der Speicherverbrauch des so installierten Programms... Ich hab hier ein Mini-Tool, was in der Taskbar vor sich hinläuft.. und ca. satte 16 MB wegzieht.

Da schluck ich schon mal trocken.

16 MB ... Wir sind doch in 2007 angekommen, was sind denn da 16 MB ?

Ich sag dazu: Völlig egal, mach dir darüber keine gedanken, und erst recht kein rumbasteln, es lohnt sich nicht.

Und nebenbei angemerkt, ich bezweifel stark das du etwas verbessern kannst was die wx leute nicht gemacht haben.
Spontifixus
User
Beiträge: 9
Registriert: Donnerstag 3. August 2006, 12:33

Hier bei uns in der Firma gibt es bei der Softwareentwicklung einen Leitsatz:

Optimiere nur, wenn du Performance-Probleme hast!

Hast du Performance-Probleme? :wink:
oliver1974
User
Beiträge: 97
Registriert: Donnerstag 26. Oktober 2006, 15:01

Ich kenne den Leitsatz, und ich finde auch die Argumente hier alle soweit okay... trotzdem sollte man auch im Jahr 2007 sich noch fragen dürfen, ob mal so eben das "wegknallen" von 16 MB für eine absolute Trivialaktion wirklich der Königsweg ist....

In dem Thread hier
http://www.python-forum.de/topic-9793,15.html

habe ich mich ja auch zu dem Thema ausgelassen.. Aber genau hier ist so ein Punkt erreicht, wo ich mich schon frage "muss ich 16 MB allokieren um DAS machen zu können?".

Zu mal das dann auch wirklich alle so halten.. Jeder Entwickler denkt dann "wir haben das Jahr 2007, memory is cheap...", und das macht die Kisten dann so träge weil x-Programme im Hintergrund laufen die den Hauptspeicher so vollmüllen dass die Kiste nur noch am swappen ist.

Ich denke mir zwar auch, dass ich mit der bloßen Umstellung auf C++ in Verbindung mit wxWidgets nicht so viel reissen kann.. Da müsste ich wohl eher direkt auf die Win32-Api gehen, damit ich nicht so viel "Zeug" in Form von DLLs mitschleppe, aber mal sehen...
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

oliver1974 hat geschrieben:noch fragen dürfen, ob mal so eben das "wegknallen" von 16 MB für eine absolute Trivialaktion wirklich der Königsweg ist....
Hi oliver!

Was ist teurer? 128 MB RAM oder ein Programmierer, der einen Tag lang versucht, weniger Speicher zu verbrauchen.

Wenn ich etwas mit ein paar leicht verwendbaren Befehlen erreichen kann, dann tu ich das zuerst auch mal. Auch wenn es 16 MB kostet. Erst dann, wenn es wirklich ein Problem wird, diese 16 MB statt 2 MB zu verbrauchen, dann muss ich mich darum kümmern -- auch wenn das den Kunden mehr kosten wird.

Optimierungen kosten Zeit -- viel Zeit sogar. Die Zeit eines Programmierers ist teuer. Optimierungen sind nur dann wichtig, wenn sie sich rentieren. Ein Programmierer, der von Anfang an mehr Zeit fürs optimieren als für die eigentliche Aufgabenstellung verbrät, hat bei mir nicht lange einen Job. Zuerst kommt immer die Lösung des Problems. Erst wenn nach der Qualitätskontrolle und dem Ausbessern von Fehlern noch Zeit übrig bleibt, kann man Dinge verbessern, die der Kunde nicht sieht und niemals honorieren würde.

Wenn du ein Programm für dich selber schreibst, dann ist das natürlich etwas anderes. Dann kannst du dich austoben und die optimalsten und nicht die rentabelsten Lösungen für ein Problem suchen.

Viele müssen rentabel programmieren um sich und ihre Familie zu ernähren. Die, die das nicht müssen, können sich um Optimierungen kümmern, die nicht von Kunden bezahlt werden. Was auf keinen Fall negativ gemeint sein soll. Wenn ich die Zeit für Optimierungen habe, dann nehme ich sie mir auch.

Eine gute Hilfe ist es wahrscheinlich, wenn Code von anderen Programmierern gegengelesen wird. Jeder liest den Code von einem anderen befreundeten Programmierer und kann dem Programmierer Stichworte für mögliche Verbesserungen geben. Der Programmierer kann diese je nach Zeitdruck aufgreifen und umsetzen. So greift man mindestens auf das doppelte KnowHow zu und verbrät weniger Zeit mit Suchen einer guten Lösung. Dieses System werde ich nächstes Jahr wahrscheinlich bei mir in der Firma einführen. Ich muss dafür nur noch ein brauchbares Kooperationssystem finden. So etwas z.B. was Guido v. Rossum für Google geschrieben hat.

mfg
Gerold
:-)
Zuletzt geändert von gerold am Montag 12. März 2007, 09:32, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

Wobei immer noch die Frage ist, ob wirklich 16 MiB verbraucht werden oder ob nicht ein Teil davon mit anderen Programmen geteilt wird. Stichwort DLLs. Wenn man 10 solcher kleinen Programme startet, die wxWindows zur Anzeige eines Icons im Tray benutzen, dann steigt der Speicherverbrauch ja nicht plötzlich auf 160 MiB, auch wenn vielleicht für jedes einzelne Programm 16 MiB angezeigt werden.
Antworten