Hallo,
gibt es eine unkomplizierte Möglichkeit Python mehr 2GB Ram zuordnen zu können?
Wie sieht es mit Windows 7 64 Bit aus? Reicht es schon, wenn ich das installiere oder müßte ich dann auch den 64 Bit Python Compiler nehmen. Spricht etwas dagegen den 64 Bit Python Compiler zu nehmen?
Wie sieht es in der Linux Welt aus?
Python mit viel Ram
Warum sollte es überhaupt Probleme mit mehr als 2 GiB RAM geben? Die Grenze ist mit 32 bit bei 4 GiB.
Edit: Hmm offensichtlich ist das eine Windows Beschränkung. Bei Linux weiß ich nicht, hängt vermutlich vom verwendeten System ab
Bei Ubuntu gibts z.B. Standardmäßig kein PAE deshalb wird das Limit mindestens irgendwo bei < 4 GiB pro Prozess liegen.
Bei OSX gibt es auf jeden Fall mit 32 bit 4 GiB pro Prozess und ich glaube 64 GiB max(oder das was grad in den Mac reinpasst hängt ja auch vom Mainboard ab).
Edit: Hmm offensichtlich ist das eine Windows Beschränkung. Bei Linux weiß ich nicht, hängt vermutlich vom verwendeten System ab

Bei OSX gibt es auf jeden Fall mit 32 bit 4 GiB pro Prozess und ich glaube 64 GiB max(oder das was grad in den Mac reinpasst hängt ja auch vom Mainboard ab).
Mein Testprogramm crasht schon bei ~500 MB (Win7 64bit, Python 32bit)
(Hätte natürlich entsprechend mehr Resourcen zur Verfügung -> 4GB RAM)

Code: Alles auswählen
>>> l = []
>>> while True:
... l.append(1)
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
MemoryError
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher
http://ms4py.org/
Gerhard Kocher
http://ms4py.org/
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Hab das selbe skript laufen lassen und mit process explorer von sysinternals nachgesehen. Bricht ab mit:
Peak Private Bytes: 5.165.360 K
Peak Working Set: 4.323.936 K
In der "Private Bytes" History steht am Ende dann: 2.3 GB Wobei da deutliche Spitzen zu sehen sind (Was ich merkwürdig finde)
Win7 64Bit, Python 2.6 32Bit
Das ganze sieht dann so aus:

Peak Private Bytes: 5.165.360 K
Peak Working Set: 4.323.936 K
In der "Private Bytes" History steht am Ende dann: 2.3 GB Wobei da deutliche Spitzen zu sehen sind (Was ich merkwürdig finde)
Win7 64Bit, Python 2.6 32Bit
Das ganze sieht dann so aus:

@jens: Die Spitzen sind bei der Art von dynamischen Arrays, die Python für Listen verwendet zu erwarten. Immer wenn der Platz nicht mehr ausreicht wird ein neues ca. doppelt so grosses Array angefordert, das alte da rüberkopiert und dann freigegegen. So erreicht man das `append()` armortisiert in O(1) Zeit pro Aufruf läuft.
Nope, kann eigentlich nicht seinahojnnes hat geschrieben:@ms4py: vllt. weil nicht mehr genügend Speicher vorhanden ist um das nächstgrößere Arrays anzufordern? Aber eigentlich hab ich keine Ahnung...


„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher
http://ms4py.org/
Gerhard Kocher
http://ms4py.org/
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
@ms4py: welche Python Version hast du genau?
Meine ist:
Meine ist:
Somit hab ich wohl nicht die 32Bit, sondern die 64Bit Variante installiert. Dann ist aber auch hier die Frage, warum bei 2GB Schluss ist. Speicher ist genügend frei.Python 2.6.4 (r264:75708, Oct 26 2009, 07:36:50) [MSC v.1500 64 bit (AMD64)] on win32
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
2GB is das "User-mode virtual address space for each 32-bit process" für 32 bit Windows:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Gruss,
Jonas
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Gruss,
Jonas
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
jens hat geschrieben:@ms4py: welche Python Version hast du genau?
Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on win32
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher
http://ms4py.org/
Gerhard Kocher
http://ms4py.org/
Mit ziemlicher Sicherheit benutzt auch Python für Listen den üblichen Algorithmus, der ein vordefiniertes Array mit Kapazität C wachsen lässt, indem ein neues Array mit Kapazität C*N (wobei N relativ nahe an 2 liegt) angelegt wird und alle existierenden Referenzen in das neue Array kopiert werden. Das geht schnell, braucht aber viel Speicher, wenn das Array groß wird. Ein besserer Speichertest wäre daher `[None] * count`, da ich annehme, dass hier die Liste automatisch auf die richtige Größe gesetzt wird.
Stefan
Stefan
Gibt es denn irgendwelche Obergrenzen an Arbeitsspeicher, welches ein 64 Bit Python addressieren kann? Wir haben hier nur Anwendung mit extrem viel Daten und es wäre interessant, ob es sich lohnen würde einen entsprechend teuren Rechner zu kaufen.
kaju hat geschrieben:Gibt es denn irgendwelche Obergrenzen an Arbeitsspeicher, welches ein 64 Bit Python addressieren kann? Wir haben hier nur Anwendung mit extrem viel Daten und es wäre interessant, ob es sich lohnen würde einen entsprechend teuren Rechner zu kaufen.
Was verstehst du denn unter teuer? Werden überhaupt noch Mainstreamprozessoren ohne 64bit Unterstützung gefertigt?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Die Frage ist auch, ob es wirklich sinnvoll ist mit großen Daten im RAM zu arbeiten. Ich würde eher in Richtung einer schnellen Festplatte (-> SSD) investieren (wenn das überhaupt notwendig ist) und mit einem DBS arbeiten!
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher
http://ms4py.org/
Gerhard Kocher
http://ms4py.org/
Wie viel RAM ein Prozess einnehmen kann ist doch auch immer eine Frage des Betriebssystems und zumindest unter Linux eine Frage, wie der Kernel kompiliert wurde.
Python hat meines Wissens selbst kein max. Memory limit, bitte korrigiert mich, wenn ich falsch liege.
Wie ms4py schon erwähnt, ist es auch nicht unbedingt eine gute Idee allzu viel Daten im RAM liegen zu lassen.
Python hat meines Wissens selbst kein max. Memory limit, bitte korrigiert mich, wenn ich falsch liege.
Wie ms4py schon erwähnt, ist es auch nicht unbedingt eine gute Idee allzu viel Daten im RAM liegen zu lassen.
Bzgl. Festplatte. Das habe ich auch schon überlegt. Wie viel mehr Tranferrate hat denn so eine SDD Festplatte?
Wir arbeiten mit EEG Daten. Und wenn wir nicht selbst tricksen wollen müssen die Daten alle gleichzeitig im Hauptspeicher sein. DBS halte ich also für nicht sinnvoll. Bzw. selbst wenn. würde sich der Aufwand nicht lohnen ein Interace/Converter für eine DBS zu schreiben für alle anderen Programme.
Das Betriebsystem ist egal. Hauptsache es geht unter einem. Ubuntu 64 wäre optimal. Kann jemand einfach mal probieren, ob er mit seiner Python 64Bit Version mehr als 10GB Hauptspeicher addressieren kann?
Wir arbeiten mit EEG Daten. Und wenn wir nicht selbst tricksen wollen müssen die Daten alle gleichzeitig im Hauptspeicher sein. DBS halte ich also für nicht sinnvoll. Bzw. selbst wenn. würde sich der Aufwand nicht lohnen ein Interace/Converter für eine DBS zu schreiben für alle anderen Programme.
Das Betriebsystem ist egal. Hauptsache es geht unter einem. Ubuntu 64 wäre optimal. Kann jemand einfach mal probieren, ob er mit seiner Python 64Bit Version mehr als 10GB Hauptspeicher addressieren kann?
Zuletzt geändert von kaju am Montag 10. Mai 2010, 17:38, insgesamt 1-mal geändert.
ahojnnes hat geschrieben:Wie ms4py schon erwähnt, ist es auch nicht unbedingt eine gute Idee allzu viel Daten im RAM liegen zu lassen.
Was ist zum Beispiel mit redis?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]