2016-05-21 2 views
1

Mit dem folgenden Code, der zu einem Speicherüberlauf führt:Numpy load() Speicherüberlauf ergibt Segmentation fault

import numpy as np 

a = np.arange(10000000) 
np.save('a', a) 

l = [] 
while True: 
    l.append(np.load('a.npy')) 

Python Fehler eine Segmentation fault aus, anstelle einer Memory. Es scheint für Maschinen wie AWS EC2 der Fall zu sein, die keinen Swapspeicher haben (ich habe mit einer Maschine mit mehr RAM und einem Swapspeicher versucht, und ich bekomme einen MemoryError).

Antwort

1

ich Ihnen mehrere Ressourcen geben werde durch unten gehen, aber im Allgemeinen ist dies sehr viel OS/systemabhängig. SegFlts

Einfache Antwort: Sie erhalten es wahrscheinlich, weil Sie Adresse für den Zugriff auf Speicher, die versuchen, die im Speicher nicht vorhanden ist. Es ist auch möglich segfaults bekommen, wenn Ihr Speichermodul Probleme oder wegen eines der folgenden (diese klar Ihre Zweifel sollte) hat:

Blick auf: Segfault instead of MemoryError when bytearray too big

Auch, warum Fehlersegmentierung? Possible answer

ein segfault Tracing (Wenn Sie noch etwas fühlen, ist faul!): python tracing a segmentation fault

Siehe: Similar question

Die gestellte Frage tatsächlich breit ist, wie die Antwort auf sie Seiten der Erklärung nehmen kann (daher relevante Links hinzugefügt).

+0

Es sieht so aus, als ob der zweite Link, den Sie zur Verfügung gestellt haben, einen ähnlichen Fehler in Python3 meldet, und ich habe verifiziert, dass Python2 einen MemoryOverflow und nicht einen Segfault ausgibt. Ich bin mir nicht sicher, dass Numpy Bytearray für seinen Datencontainer verwendet. Wie auch immer, das sollte reparierbar sein. Danke für Ihre Hilfe. –

+0

@DavidBrochart Gut zu wissen, dass es geholfen hat :) –