Ist es eigentlich möglich mit Python die Größe des RAMs zu Ermitteln?
Es wäre zwar nicht zwingend wichtig, aber besser für ein Programm.
(Und wenn es möglich ist und ich ein Modul dafür brauche was nicht standardmäßig dabei ist bitte den Download Link, und eine Referenz wenn oder ein Beispiel.)
Größe des RAMs Ermitteln
@Py-Prog: Für welches Betriebssystem? Und was denkst Du was Du mit der Information anfangen kannst? Der Speicher wird ja vom Betriebsystem verwaltet und steht nicht *einem* Programm zur Verfügung. Wie welcher Speicher (real und virtuell) welchem Prozess zugeordnet wird, hängt von vielen Faktoren zu Laufzeit eines Prozesses ab und was da nebenher noch so alles läuft. Ein einzelnes Programm kann also mit der Information wieviel Speicher im Rechner steckt, also eigentlich nicht viel sinnvolles anfangen.
Das Betriebssystem ist (immer noch) Windows XP (Home SP3).
Und doch, ein einzelnes Programm kann damit sehr viel anfangen. (Und es ist auch noch sinnvoll!)
Und doch, ein einzelnes Programm kann damit sehr viel anfangen. (Und es ist auch noch sinnvoll!)
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Wer Rechtschreibfehler findet darf sie behalten.
Besser für was?Py-Prog hat geschrieben:Es wäre zwar nicht zwingend wichtig, aber besser für ein Programm.
Die Grösse des RAMs absolut gar nichts über dessen Verfügbarkeit aus. Speicher kannst du überhaupt nicht managen und der Speicherverbrauch eines Objektes ist sowieso nicht zu ermitteln.
Aber Grundsätzlich ist nicht der Ganze RAM belegt. Aber manche Programme können auch die System Auslastung herausfinden, z. B. Taskmanager, Virenscanner, usw.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Wer Rechtschreibfehler findet darf sie behalten.
@Py-Prog: Schau mal hier:
http://bytes.com/topic/python/answers/2 ... ing-python
http://bytes.com/topic/python/answers/2 ... ing-python
Stimmt aber du musst auch noch Fragmentierung beachten usw. Es kann durchaus sein dass du 100MB frei hast und Allokationen von weitaus weniger fehlschlagen.Py-Prog hat geschrieben:Aber Grundsätzlich ist nicht der Ganze RAM belegt.
Wenn ihr immer so denkt, wieso Programmiert ihr dann? Es kann immer sein das aus irgendeinem Grund etwas nicht funktioniert. 

Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Wer Rechtschreibfehler findet darf sie behalten.
Deine vorherigen Posts geben genug Kontext um bei der Frage davon auszugehen dass was auch immer du machen willst scheitert oder absolut grausam wird. Grund genug erstmal genau nachzufragen was du vorhast bevor man eine Antwort gibt.
Das Backup-skript was ich mal geschrieben hab, hat auf einmal nicht mehr funktioniert und jetzt weiß ich wieso, weil eine Datei zu groß war. Und wenn ich den Fehler beheben will muss ich ja z. B. immer nur 512 MB von einer Datei einlesen bis sie Kopiert ist. Und jetzt wäre es besser wenn das skript selber erkennt wie viel es auf einmal kopieren kann. Wenn es auf einem getunten PC läuft mit 16 GB RAM und es dann auch nur so 'Kleine' teile Kopiert, verhältnismäßig zu langsam.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Wer Rechtschreibfehler findet darf sie behalten.
Ob du 5MB einliest oder 512MB dürfte von der Geschwindigkeit keinen grossen Unterschied machen, wer aber tatsächlich 16GB Speicher hat wird die sicherlich nicht haben weil er die braucht um Backupscripts laufen zu lassen.
@Py-Prog: Du machst da IMHO viel zu naive Annahmen. Wenn das zum Beispiel ein Windows-Rechner ist, dann läuft da in der Regel ein Kernel-Task, der regelmässig Speicherseiten von Prozessen in die Auslagerungsdatei schreibt. Je mehr Du also auf einmal in den Speicher liest ohne das zeitnah wieder freizugeben, desto mehr Daten werden völlig unnötigerweise auf die Platte geschrieben. Wenn dann noch andere Prozesse Speicher anfordern fliegen die Speicherseiten aus dem RAM und müssen, wenn Du dann endlich wieder ans schreiben gehst, erneut von Platte in den RAM geladen werden. Das ganz also zeitlich auch ganz gewaltig nach hinten losgehen.
Das Betriebssystem hat die Aufgabe den Speicher zu verwalten und tut das auf modernen Systemen auf relativ komplexe Art und Weise. Da sollte man nicht versuchen "schlauer" zu sein, sondern darauf vertrauen, dass das BS seinen Job im Mittel ordentlich erledigt. Die Blöcke sollten IMHO ein paar wenige MB nicht überschreiten, so dass das auch auf Systemen mit wenig RAM vernünftig funktioniert und anderen Prozessen nicht unnötig Speicher abringt. Wenn ein Betriebssystem erkennt, dass ein Prozess in hoher Geschwindigkeit aus einer Datei liest und in eine andere schreibt, dann kann es auch so viel wie RAM "frei" ist, in den Block-Cache lesen, wenn das was bringt.
Das Betriebssystem hat die Aufgabe den Speicher zu verwalten und tut das auf modernen Systemen auf relativ komplexe Art und Weise. Da sollte man nicht versuchen "schlauer" zu sein, sondern darauf vertrauen, dass das BS seinen Job im Mittel ordentlich erledigt. Die Blöcke sollten IMHO ein paar wenige MB nicht überschreiten, so dass das auch auf Systemen mit wenig RAM vernünftig funktioniert und anderen Prozessen nicht unnötig Speicher abringt. Wenn ein Betriebssystem erkennt, dass ein Prozess in hoher Geschwindigkeit aus einer Datei liest und in eine andere schreibt, dann kann es auch so viel wie RAM "frei" ist, in den Block-Cache lesen, wenn das was bringt.
Du kannst es ohnehin nicht sinnvoll besser hinbekommen, im Gegenteil solche "Optimierungen" sind sehr komplex, nahezu unmöglich auf jeder Platform sinnvoll hinzubekommen und haben zweifelhaften Erfolg, den noch hast du noch nicht gezeigt dass deine Annahmen überhaupt richtig sind. Speicher Allokation kostet dich schliesslich auch Zeit.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Ich habe das Gefuehl, dass folgender Link hier reichlich relevant ist: http://www.varnish-cache.org/trac/wiki/ArchitectNotes
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- mkesper
- User
- Beiträge: 919
- Registriert: Montag 20. November 2006, 15:48
- Wohnort: formerly known as mkallas
- Kontaktdaten:
@cofi: Sehr interessant, der Link, danke!
Python ist ja eine Hochsprache und das aus gutem Grund. Wer immer nur versucht, jedes kleine Schräubchen "optimal" zu bedienen, verliert leicht den Blick für das große Ganze.
Python ist ja eine Hochsprache und das aus gutem Grund. Wer immer nur versucht, jedes kleine Schräubchen "optimal" zu bedienen, verliert leicht den Blick für das große Ganze.