MemoryError mit Pickle in Python

Ich bin der Bearbeitung einige Daten, und ich habe abgelegt die Ergebnisse in drei Wörterbücher, und ich habe Sie gerettet, um die Festplatte mit Gurke. Jedes Wörterbuch hat 500-1000MB.

Nun ich bin laden Sie mit:

import pickle
with open('dict1.txt', "rb") as myFile:
    dict1 = pickle.load(myFile)

Aber schon beim laden das erste Wörterbuch, das ich bekommen:

*** set a breakpoint in malloc_error_break to debug
python(3716,0xa08ed1d4) malloc: *** mach_vm_map(size=1048576) failed (error code=3)
*** error: can't allocate region securely
*** set a breakpoint in malloc_error_break to debug
Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 858, in load
    dispatch[key](self)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1019, in load_empty_dictionary
    self.stack.append({})
MemoryError

Wie man dieses Problem lösen? Mein Rechner hat 16 GB RAM, so finde ich es ungewöhnlich, dass das laden eine 800MB-Wörterbuch abstürzt. Was finde ich auch ungewöhnlich ist, dass es keine Probleme gab beim speichern der Wörterbücher.

Weiter, in Zukunft Plane ich, um weitere Daten, die sich in größeren Wörterbüchern (3-4GB auf der Festplatte), so dass jede Beratung, wie die Verbesserung der Effizienz wird geschätzt.

Welches OS verwenden Sie? Ist die Größe der auf Platte Datei-Größe, oder hast du Messen der tatsächlichen Speicher verwenden?
Es hängt von Ihrem Betriebssystem, wie viel Speicher ein Prozess zuweisen dürfen.
Größe ist die Größe der Datei auf der Festplatte. Ich bin mit Mac OS 10.10. Gibt es eine Möglichkeit, einzustellen, wie viel Speicher darf umgelegt werden?
800 MB an Daten nicht übersetzen zu 800MB Speicherauslastung; es könnte größer sein, oder es könnte kleiner sein, aber in der Regel größer. Wie haben Sie zu produzieren, diese Gurken in den ersten Platz?
Und wie groß war Ihre dict1 dann? Man müsste mit sys.getsizeof() rekursiv um den Speicherbedarf des Objekts. Das footprint ist abhängig von OS, und wenn Sie ein 32-bit-oder 64-bit-Prozess.

InformationsquelleAutor flotr | 2015-01-21

Schreibe einen Kommentar