calcul d'empreinte mémoire et de temps pour un subprocess

Le
Kevin Denis
Bonjour,

je dois lancer divers programmes (C avec implémentation et options de
compilation différentes) et dois calculer leur empreinte mémoire et temps
d'exécution.

Avec subprocess (python 2.7) je peux lancer un sous process.

Mais qu'existe t'il pour calculer l'empreinte mémoire et la durée
d'exécution d'un sous programme?

Merci
--
Kevin
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Alain Ketterlin
Le #25282012
Kevin Denis
je dois lancer divers programmes (C avec implémentation et options d e
compilation différentes) et dois calculer leur empreinte mémoir e et temps
d'exécution.

Avec subprocess (python 2.7) je peux lancer un sous process.

Mais qu'existe t'il pour calculer l'empreinte mémoire et la durà ©e
d'exécution d'un sous programme?



getrusage, comme en C

http://docs.python.org/2/library/resource.html

Il faut s'assurer que la couche de python autour des différents
programmes n'a pas d'incidence significative sur ce que tu mesures.

-- Alain.
Kevin Denis
Le #25282882
Le 15-03-2013, Alain Ketterlin
je dois lancer divers programmes (C avec implémentation et options de
compilation différentes) et dois calculer leur empreinte mémoire et temps
d'exécution.

qu'existe t'il pour calculer l'empreinte mémoire et la durée
d'exécution d'un sous programme?



getrusage, comme en C

http://docs.python.org/2/library/resource.html



Merci, ça colle bien avec ce que je veux faire. J'ai juste une question:

$ cat sleep.sh
#!/bin/bash
sleep 15

$ ipython
In [1]: import subprocess
In [2]: import resource
In [3]: subprocess.call(['./sleep.sh'])
Out[3]: 0
In [4]: r_usage = resource.getrusage(resource.RUSAGE_CHILDREN)
In [5]: print "RSS mem used (kB): ", r_usage.ru_maxrss
RSS mem used (kB): 9272
In [6]: print "Time used in user mode: ", r_usage.ru_utime
Time used in user mode: 0.0
In [7]: print "Time used in system mode:", r_usage.ru_stime
Time used in system mode: 0.0
In [8]:

Sur la taille: 9272kO (soit 9 Mega de RAM??) ça fait pas un peu beaucoup pour
un sleep?
Sur les durées
Pourquoi 0?

Il faut s'assurer que la couche de python autour des différents
programmes n'a pas d'incidence significative sur ce que tu mesures.



Effectivement, et dans mon cas ça n'a pas d'importance.
--
Kevin
Alain Ketterlin
Le #25283002
Kevin Denis
getrusage, comme en C

http://docs.python.org/2/library/resource.html



Merci, ça colle bien avec ce que je veux faire. J'ai juste une quest ion:

$ cat sleep.sh
#!/bin/bash
sleep 15

$ ipython
In [1]: import subprocess
In [2]: import resource
In [3]: subprocess.call(['./sleep.sh'])
Out[3]: 0
In [4]: r_usage = resource.getrusage(resource.RUSAGE_CHILDREN)
In [5]: print "RSS mem used (kB): ", r_usage.ru_maxrss
RSS mem used (kB): 9272
In [6]: print "Time used in user mode: ", r_usage.ru_utime
Time used in user mode: 0.0
In [7]: print "Time used in system mode:", r_usage.ru_stime
Time used in system mode: 0.0
In [8]:

Sur la taille: 9272kO (soit 9 Mega de RAM??) ça fait pas un peu beau coup pour
un sleep?



Tu oublies bash, qu'il a fallu lancer... Essaie avec /bin/sleep directement.

Sur les durées. Pourquoi 0?



C'est la durée passée en mode user et en mode noyau, ici juste le temps
d'invoquer sleep(): le processus est mis en sommeil par le noyau pendant
les 15 secondes, il ne s'exécute donc pas, donc le temps n'est pas
compté. Si tu veux le temps d'horloge (absolu), il faudra utiliser
time.clock().

-- Alain.
Kevin Denis
Le #25282992
Le 15-03-2013, Alain Ketterlin
Sur les durées. Pourquoi 0?



C'est la durée passée en mode user et en mode noyau, ici juste le temps
d'invoquer sleep(): le processus est mis en sommeil par le noyau pendant
les 15 secondes, il ne s'exécute donc pas, donc le temps n'est pas
compté.



Ok.

Si tu veux le temps d'horloge (absolu), il faudra utiliser
time.clock().



Je n'ai pas du comprendre time.clock() car sa valeur est identique avant
lancement du subprocess et après (?)
Par contre time.time() me renvoie ce qui m'intéresse.
start = time.time()
(.. subprocess etc...)
fin = time.time()
print "temps total = ", round(fin-start,2)

Merci
--
Kevin
Alain Ketterlin
Le #25283062
Kevin Denis
Le 15-03-2013, Alain Ketterlin
Sur les durées. Pourquoi 0?



C'est la durée passée en mode user et en mode noyau, ici juste le temps
d'invoquer sleep(): le processus est mis en sommeil par le noyau pendant
les 15 secondes, il ne s'exécute donc pas, donc le temps n'est pas
compté.



Ok.

Si tu veux le temps d'horloge (absolu), il faudra utiliser
time.clock().



Je n'ai pas du comprendre time.clock() car sa valeur est identique avant
lancement du subprocess et après (?)



Non, c'est moi qui raconte n'importe quoi : clock() est en fait
sensiblement équivalent à getrusage. C'est bien time() qu'il faut
utiliser.

-- Alain.
Publicité
Poster une réponse
Anonyme