Wie kann ich mehr Speicher zuzuteilen, um Python-Programm? Deren nicht mehr als 64 MB auf 4 GB RAM
Ich habe ein Python Programm auf eine Eingabe von Daten auf 4GB RAM 32-bit 12.04 Ubuntu. Die zeitliche und räumliche Komplexität des Programms sind beide O(n). Bei der Eingabe von Daten ist rund 100 kb, die es vollendet die Ausführung in etwa 4sec mit peak-RAM-Verbrauch wird mit 0,5%(mit " top " - Befehl in LINUX). Jedoch, als ich versuchte, die input-Daten von den Größen 500 kB, 2,5 MB und 16 MB, ist der Prozess nicht abgeschlossen innerhalb von 1 Stunde(in jedem Fall musste ich Abbrechen mit Strg-C) und der Speicher-Verbrauch fest war mit 1,6% (d.h. rund 64 MB jeweils). Kann ich die Zuordnung dieser Python-Prozess mit mehr RAM-Speicher irgendwie?
Hinweis: ich bin die Implementierung der Karte Reduzieren job in Python mit 'mrjob' Bibliothek aus, die von Python.
Folgenden ist das Protokoll der erfolgreichen Ausführung der Eingabe-csv-Datei ist 100 kB.
ankit@ubuntu:~/mrj/mrjo/mrjob/examples$ python mt1.py as.txt > asop.txtusing configs in /home/ankit/.mrjob.conf
creating tmp directory /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.094809.251269
> /usr/bin/python mt1.py --step-num=0 --mapper /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.094809.251269/input_part-00000
writing to /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.094809.251269/step-0-mapper_part-00000
> /usr/bin/python mt1.py --step-num=0 --mapper /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.094809.251269/input_part-00001
writing to /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.094809.251269/step-0-mapper_part-00001
Counters from step 1:
(no counters found)
writing to /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.094809.251269/step-0-mapper-sorted
> sort /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.094809.251269/step-0-mapper_part-00000 /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.094809.251269/step-0-mapper_part-00001
> /usr/bin/python mt1.py --step-num=0 --reducer /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.094809.251269/input_part-00000
writing to /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.094809.251269/step-0-reducer_part-00000
Counters from step 1:
(no counters found)
> /usr/bin/python mt1.py --step-num=1 --mapper /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.094809.251269/input_part-00000
writing to /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.094809.251269/step-1-mapper_part-00000
Counters from step 2:
(no counters found)
Moving /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.094809.251269/step-1-mapper_part-00000 -> /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.094809.251269/output/part-00000
Streaming final output from /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.094809.251269/output
removing tmp directory /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.094809.251269
Dies ist die Ausführung von log-und traceback-wenn die input csv-Datei ist 2,5 MB.
ankit@ubuntu:~/mrj/mrjo/mrjob/examples$ python mt1.py matlabsample.csv > matsamop.txt
using configs in /home/ankit/.mrjob.conf
creating tmp directory /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.065246.700221
> /usr/bin/python mt1.py --step-num=0 --mapper /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.065246.700221/input_part-00000
writing to /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.065246.700221/step-0-mapper_part-00000
> /usr/bin/python mt1.py --step-num=0 --mapper /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.065246.700221/input_part-00001
writing to /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.065246.700221/step-0-mapper_part-00001
Counters from step 1:
(no counters found)
writing to /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.065246.700221/step-0-mapper-sorted
> sort /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.065246.700221/step-0-mapper_part-00000 /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.065246.700221/step-0-mapper_part-00001
> /usr/bin/python mt1.py --step-num=0 --reducer /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.065246.700221/input_part-00000
writing to /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.065246.700221/step-0-reducer_part-00000
Counters from step 1:
(no counters found)
> /usr/bin/python mt1.py --step-num=1 --mapper /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.065246.700221/input_part-00000
writing to /home/ankit/mrj/mrjo/examples/mt1.ankit.20121224.065246.700221/step-1-mapper_part-00000
^CTraceback (most recent call last):
File "mt1.py", line 311, in <module>
Motion_Tagging.run()
File "/usr/local/lib/python2.7/dist-packages/mrjob-0.3.5-py2.7.egg/mrjob/job.py", line 545, in run
mr_job.execute()
File "/usr/local/lib/python2.7/dist-packages/mrjob-0.3.5-py2.7.egg/mrjob/job.py", line 561, in execute
self.run_job()
File "/usr/local/lib/python2.7/dist-packages/mrjob-0.3.5-py2.7.egg/mrjob/job.py", line 631, in run_job
runner.run()
File "/usr/local/lib/python2.7/dist-packages/mrjob-0.3.5-py2.7.egg/mrjob/runner.py", line 490, in run
self._run()
File "/usr/local/lib/python2.7/dist-packages/mrjob-0.3.5-py2.7.egg/mrjob/local.py", line 193, in _run
combiner_args=combiner_args)
File "/usr/local/lib/python2.7/dist-packages/mrjob-0.3.5-py2.7.egg/mrjob/local.py", line 488, in _invoke_step
self._wait_for_process(proc_dict, step_num)
File "/usr/local/lib/python2.7/dist-packages/mrjob-0.3.5-py2.7.egg/mrjob/local.py", line 657, in _wait_for_process
tb_lines = find_python_traceback(stderr_lines)
File "/usr/local/lib/python2.7/dist-packages/mrjob-0.3.5-py2.7.egg/mrjob/parse.py", line 171, in find_python_traceback
for line in lines:
File "/usr/local/lib/python2.7/dist-packages/mrjob-0.3.5-py2.7.egg/mrjob/local.py", line 680, in _process_stderr_from_script
for line in stderr:
KeyboardInterrupt
Ich glaube nicht, dass Sie haben ein Problem mit der RAM-Zuweisung, in der Regel wird der Dolmetscher nur nimmt, was Speicher braucht. Ich denke, dein Programm ist wirklich nicht laufen in
O(n)
. Wenn Sie nach Ihrem code, können wir einen Blick.Vielen Dank für Ihre Antwort. Ich kann leider nicht nach dem code, für einige Gründe, aber ich versichere Ihnen, dass es Zeit und Raum Komplexität sind beide O(n). Und ja, es ist eine Karte Reduzieren job.
Pieters : das ist genau Das, was ich dachte, als ich beobachtete, dass es in top-Prozesse.
Wenn Sie nicht code freigeben, dann ist diese Frage auch lokalisiert für uns, um in der Lage sein, um Ihnen zu helfen, noch wird es jemals sein hilfreich für andere. Ich habe dafür gestimmt, um es zu schließen aus diesen Gründen.
InformationsquelleAutor | 2012-12-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du nicht "Speicher, ein Python-Prozess", verwenden Sie größere Strukturen in der Python-Programm. Auf einer grundlegenden Ebene, die Ihre Algorithmus ist wahrscheinlich fehlerhaft, so dass es nicht nehmen Vorteil von Speicher, die verfügbar ist.
Das Python-Skript, das ich geschrieben habe, dauert csv-Datei als Eingabe, speichert jede Transaktion/Tupel als Liste innerhalb Liste. Der rest des scripts beinhaltet die Durchführung von Berechnungen, die auf Elemente in den Listen. also bin ich nur den Umgang mit den Listen-Daten -Struktur. Sie können bitte werfen mehr Licht auf, was meinst du mit größere Strukturen?
InformationsquelleAutor Ignacio Vazquez-Abrams
FYI, Dies ist nicht eine code-Lösung.
Jedoch können Sie durch den unten stehenden link und bekommen einige Tiefe Gedanken, wie python-memory-Implementierung funktioniert und wie das problem behoben wurde. Es behandelt auch zusätzliche Bereiche, in denen Python-Speicher-management verbessert werden kann. Hoffe, es wird nützlich sein.
http://www.evanjones.ca/memoryallocator/
InformationsquelleAutor Sivachandran