malloc_error - hilfe...

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.
Antworten
wieni
User
Beiträge: 3
Registriert: Mittwoch 18. März 2009, 18:43

Hi,

bin dabei biologische Daten zu prozessieren und aus riesen XML-files (bis zu 7GB) notwendige Daten in ein Dictionary zu extrahieren. Nach einigen Anläufen hat das auch funktioniert. Mein Problem jetzt ist, dass die Dictionaries natürlich z.T. auch nicht so klein sind - sprich ca. 100MB. Zur Info - ich habe die Datenstruktur selbst in einer Datei abgelegt, die ich dann via z.B. from dbSNP_chr14 import dict as chr14 versuche, zu importieren.

Problem: nach einigen Minuten sehe ich nur noch Folgendes:

>>> from dbSNP_chr14 import dict as chr14
Python(13497) malloc: *** mmap(size=262144) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
...
Python(13497) malloc: *** mmap(size=262144) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Python(13497) malloc: *** mmap(size=262144) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Python(13497) malloc: *** mmap(size=262144) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Python(13497) malloc: *** mmap(size=2097152) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Python(13497) malloc: *** mmap(size=102514688) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
MemoryError
>>>

Mein Rechner hat folgende Daten:
Mac OS X, v. 10.5.6
2x3GHz Quad-CoreIntel Xeon
5GB 667MHz

Habe schon alles Mögliche im Netz abgesucht, aber finde nicht wirklich was, was mir weiterhilft...Es sieht nach einem üblen Speicherproblem aus...

Vielleicht hat ja hier jemand eine Idee?! Ich wäre wirklich dankbar!!!!

Lg,
wieni
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hallo und willkommen im Forum,

Du magst uns nicht zufällig verraten auf welche Software Du Dich beziehst? Außerdem tritt der Fehler scheinbar beim Import des Moduls / aus dem Modul auf - das hätte nichts mit dem Laden der Daten zu tun, oder?

Gruß,
Christian
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Vielleicht hilft shelve.
MfG
HWK
BlackJack

@CM: Soweit ich das verstanden habe liegen die Daten als Dictionary als Python-Quelltext vor.

@wieni: Sollte das wirklich der Fall sein benutze besser ein "echtes" Datenformat, wie zum Beispiel eine Datenbank. Sqlite aus der Standardbibliothek reicht wahrscheinlich schon. Oder eben das von HWK vorgeschlagene `shelve`.
wieni
User
Beiträge: 3
Registriert: Mittwoch 18. März 2009, 18:43

Hi, erst mal ganz lieben Dank für die Antworten...

Die Daten liegen in einem Dictionary vor, dass ist richtig. Das Problem :-) - dieses ganze Prozedere (XML -> Dict) hat zum Ziel, die Daten am Ende in eine Datenbank einzufügen. Bei biologischen Daten hat man leider immer das Problem, dass es oft Key-Error gibt, sprich ein "primary key" ist mehrmals vergeben (!!!). Deshalb wollte ich/ muss ich - bevor ich die Daten einfüge einen Qualitycheck machen. Klar, ich könnte die Daten auch direkt in eine Datenbank einfügen, aber in diesem Fall - also für diese Daten - gibt es 2 öffentliche Datenbanken, die die gleiche Art von Daten bereitsstellen (HapMap, dbSNP). dbSNP hat aber einige Daten die nicht in HapMap sind und vielleicht umgekehrt, so dass ein Abgleich vor dem Einfügen in die Datenbank notwendig ist...So, dass zur Situation :-).

Ich war mir auch nicht sicher, ob es sich hier um ein Python-Problem oder Mac-Problem handelt...Weil, wenn ich das Dictionary in die Datei schreibe, ist es ja auch im Memory geladen. Also wieso, kann Python das Dictionary nicht aus der Datei laden?! Python kann ja auch 500MB Dateien in den Speicher laden...

Ok :-)...Ich werde mir heute mal "shelve" und "Sqlite" anschauen!!!! Danke, danke, danke!!
BlackJack

@wieni: Ich würde bei keiner Programmiersprache zwingend erwarten, dass sie 500 MiB an Daten aus einer Quelltextdatei kompilieren kann, nur weil das verarbeiten der gleichen Menge an Daten in einem laufenden Programm in der Sprache problemlos möglich ist. Quelltext ist ja normalerweise etwas was Menschen eintippen, und niemand tippt mal eben so 500 MiB Daten ein.

Für solche Datenmengen sollte man auch die passenden Speicherformate verwenden.
wieni
User
Beiträge: 3
Registriert: Mittwoch 18. März 2009, 18:43

Hi,

so, es sieht so aus als ob es jetzt funktioniert...verarbeite die Daten jetzt via cPickle... D.h. schreibe und lese via cPickle...War die einfachste und schnellste Lösung (zumindest für mich :-))

Der Rechner ist noch am Daten produzieren. Ich konnte aber schon mal einen Datensatz checken ... sieht gut aus!!

Trotzdem, vielen Dank für die Vorschläge!

Lg,
Wieni
Antworten