Python mit viel Ram

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.
kaju
User
Beiträge: 11
Registriert: Montag 29. März 2010, 13:46

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?
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

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).
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Also mein Python kann mit mehr als 2 GB RAM umgehen, ist ein 64-Bit Python auf einem 64-Bit Linux.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Mein Testprogramm crasht schon bei ~500 MB (Win7 64bit, Python 32bit) :?:

Code: Alles auswählen

>>> l = []
>>> while True:
...     l.append(1)
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
MemoryError
(Hätte natürlich entsprechend mehr Resourcen zur Verfügung -> 4GB RAM)
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Benutzeravatar
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:

Bild

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

@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.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Seltsam. Warum komm ich nur auf 500 MB?!

Bild
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
kaju
User
Beiträge: 11
Registriert: Montag 29. März 2010, 13:46

Mh wird wohl auf 64 bit linux + 64 bit python rauslaufen. Muss ich nur mal schauen, ob alle packete die ich so brauche dort auch laufen werden.
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

@ms4py: vllt. weil nicht mehr genügend Speicher vorhanden ist um das nächstgrößere Arrays anzufordern? Aber eigentlich hab ich keine Ahnung...
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

ahojnnes 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...
Nope, kann eigentlich nicht sein :(

Bild
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Benutzeravatar
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:
Python 2.6.4 (r264:75708, Oct 26 2009, 07:36:50) [MSC v.1500 64 bit (AMD64)] on win32
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.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
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
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

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/
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
kaju
User
Beiträge: 11
Registriert: Montag 29. März 2010, 13:46

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.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

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]
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

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/
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

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.
kaju
User
Beiträge: 11
Registriert: Montag 29. März 2010, 13:46

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?
Zuletzt geändert von kaju am Montag 10. Mai 2010, 17:38, insgesamt 1-mal geändert.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

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]
Antworten