Comment puis-je attribuer plus de mémoire de programme en Python? Sa ne consomme pas plus de 64 mo à 4 go de RAM
J'ai un programme en Python en cours d'exécution sur des données d'entrée sur les 4 go de RAM 32 bits Ubuntu 12.04. Le temps et l'espace de la complexité du programme, les deux sont des O(n). Lors de la saisie de données est d'environ 100 ko il termine l'exécution sur 4sec, avec un pic de consommation de RAM étant de 0,5%(en utilisant les 'top' de la commande sous LINUX). Cependant, quand j'ai essayé de l'entrée de données de tailles de 500ko, 2.5 MO et 16 MO, le processus n'a pas terminé dans un délai de 1 heure(dans chaque cas, j'ai dû annuler en appuyant sur Ctrl C) et la consommation de mémoire a été coincé à 1,6% (soit autour de 64 MO dans chaque cas). Puis-je attribuer ce Python processus avec plus de RAM de mémoire en quelque sorte?
Note: je me suis mise en œuvre de la Carte de Réduire l'emploi en Python à l'aide de 'mrjob" bibliothèque faite par Python.
Suivant est le journal de l'exécution réussie lorsque l'entrée de fichier csv est de 100 ko.
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
C'est le journal de l'exécution et de la traçabilité en amont lors de la saisie de fichier csv est de 2,5 MO.
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
Je ne pense pas que vous avez un problème avec l'allocation de RAM - normalement, l'interprète prend juste ce mémoire dont il a besoin. Je pense que votre programme ne s'exécute pas dans
O(n)
. Si vous postez votre code, nous pouvons jeter un oeil.Merci pour votre réponse. Malheureusement, je ne peux pas poster le code pour certaines raisons, mais je vous assure que c'est du temps et de l'espace de la complexité à la fois sont en O(n). Et oui, c'est une Carte de Réduire l'emploi.
Pierre : c'est exactement ce que je pensais quand j'ai observé dans des procédés.
Si vous ne pouvez pas partager le code, puis, cette question est trop localisé pour nous d'être en mesure de vous aider, et ne le sera jamais utile à d'autres personnes. J'ai voté pour la fermer sur ces motifs.
OriginalL'auteur | 2012-12-24
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas "allouer de la mémoire pour un Python processus", vous utilisez de grandes structures dans le programme en Python. À un niveau fondamental de votre algorithme est probablement défectueux, en telle manière qu'il ne prend pas avantage de la mémoire qui est disponible.
Le script Python que j'ai écrit prend fichier csv en entrée, les magasins de chaque opération ou un tuple comme une liste à l'intérieur de la liste principale. Le reste du script s'agit d'effectuer des calculs sur des éléments dans les listes. c'est à dire que je suis seulement à faire avec les données de la liste de la structure. Pouvez-vous s'il vous plaît jeter plus de lumière sur ce qu'entendez-vous par à l'aide de grosses structures?
OriginalL'auteur Ignacio Vazquez-Abrams
Pour info, Ce n'est pas un code de niveau de la solution.
Cependant, vous pouvez passer par le lien ci-dessous et obtenir quelques pensées profondes façon python mémoire de travaux de mise en œuvre, et comment le problème a été résolu. Il aborde également d'autres zones où Python de la gestion de la mémoire peut être améliorée. Espérons qu'il sera utile.
http://www.evanjones.ca/memoryallocator/
OriginalL'auteur Sivachandran