Twitter iPhone pliant OnePlus 12 PS5 Disney+ Orange Livebox Windows 11 ChatGPT

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

5 réponses
Avatar
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

5 réponses

Avatar
Alain Ketterlin
Kevin Denis writes:

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.
Avatar
Kevin Denis
Le 15-03-2013, Alain Ketterlin a écrit :
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
Avatar
Alain Ketterlin
Kevin Denis writes:

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.
Avatar
Kevin Denis
Le 15-03-2013, Alain Ketterlin a écrit :
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
Avatar
Alain Ketterlin
Kevin Denis writes:

Le 15-03-2013, Alain Ketterlin a écrit  :
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.