Seite 1 von 2
					
				Python mit viel Ram
				Verfasst: Mittwoch 5. Mai 2010, 10:32
				von kaju
				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?
			 
			
					
				
				Verfasst: Mittwoch 5. Mai 2010, 10:34
				von Darii
				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).
 
			
					
				
				Verfasst: Mittwoch 5. Mai 2010, 11:20
				von Leonidas
				Also mein Python kann mit mehr als 2 GB RAM umgehen, ist ein 64-Bit Python auf einem 64-Bit Linux.
			 
			
					
				
				Verfasst: Mittwoch 5. Mai 2010, 12:55
				von ms4py
				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)
 
			
					
				
				Verfasst: Mittwoch 5. Mai 2010, 13:20
				von jens
				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:

 
			
					
				
				Verfasst: Mittwoch 5. Mai 2010, 13:49
				von 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.
			 
			
					
				
				Verfasst: Mittwoch 5. Mai 2010, 14:00
				von ms4py
				Seltsam. Warum komm ich nur auf 500 MB?!

 
			
					
				
				Verfasst: Mittwoch 5. Mai 2010, 14:02
				von kaju
				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.
			 
			
					
				
				Verfasst: Mittwoch 5. Mai 2010, 14:30
				von nemomuk
				@ms4py: vllt. weil nicht mehr genügend Speicher vorhanden ist um das nächstgrößere Arrays anzufordern? Aber eigentlich hab ich keine Ahnung...
			 
			
					
				
				Verfasst: Mittwoch 5. Mai 2010, 14:44
				von ms4py
				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 
 

 
			
					
				
				Verfasst: Donnerstag 6. Mai 2010, 07:57
				von jens
				@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.
 
			
					
				
				Verfasst: Donnerstag 6. Mai 2010, 08:20
				von veers
				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
 
			
					
				
				Verfasst: Donnerstag 6. Mai 2010, 09:01
				von ms4py
				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
 
			
					
				
				Verfasst: Samstag 8. Mai 2010, 10:00
				von sma
				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
			 
			
					
				Re: Python mit viel Ram
				Verfasst: Montag 10. Mai 2010, 16:24
				von kaju
				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.
			 
			
					
				Re: Python mit viel Ram
				Verfasst: Montag 10. Mai 2010, 17:05
				von jbs
				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?
 
			
					
				Re: Python mit viel Ram
				Verfasst: Montag 10. Mai 2010, 17:18
				von ms4py
				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!
			 
			
					
				Re: Python mit viel Ram
				Verfasst: Montag 10. Mai 2010, 17:21
				von nemomuk
				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.
			 
			
					
				Re: Python mit viel Ram
				Verfasst: Montag 10. Mai 2010, 17:35
				von kaju
				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?
			 
			
					
				Re: Python mit viel Ram
				Verfasst: Montag 10. Mai 2010, 17:37
				von jbs
				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?