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
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
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.
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?
Effectivement, et dans mon cas ça n'a pas d'importance.
--
Kevin
Tu oublies bash, qu'il a fallu lancer... Essaie avec /bin/sleep directement.
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.
Ok.
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
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.