[Python]Exécuter 1 prog gourmand +ieurs fois

Résolu/Fermé
Marouanos Messages postés 26 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 2 juin 2010 - 17 août 2007 à 14:25
Marouanos Messages postés 26 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 2 juin 2010 - 19 août 2007 à 13:31
Boujours tt les programmeurs,

Je vais détailler le problème pour qu'il soit très clair et simple. svp patientez :)

J'ai écrit 1 programme python "stage.py"qui donne en sortie un .txt où il y a des trucs (peu importe). Ce programme est gourmand en RAM. Si j'augmente la valeur d'un paramètre de plus de 1500, le programme fonctionne puis m'affiche "Ressources insuffisante...".

J'ai eu l'idée d'exécuter "stage.py" plusieurs fois avec:
- un paramètre de faible valeur
- en créant au début un fichier .txt puis en continuant son remplissage chaque fois (càd sans l'écraser).

Pour se faire, j'ai écrit "stage2.py" où il y a:
import stage
for i in range(10):
       stage.myfunc()      # myfunc est la fonction principale de "stage.py" 


Le problème reste le même: "Ressources insuffisante..."

Est-ce que quelqu'un a une idée comment je peut m'en sortir?




PS: j'ai eu une autre idée d'ouvrir python.exe et écrire:
>>> for i in range(10):
        ......(ici j'appelle stage.py)

mais j'ai pas su comment le faire :p

2 réponses

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
17 août 2007 à 14:53
Faudrait voir le code qui provoque ça en fait.
0
Marouanos Messages postés 26 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 2 juin 2010 1
18 août 2007 à 03:38
Merci kilian pour ta réponse. Je peux pas optimiser mon programme. En fait, le programme est très court et très simple:

- il ouvre un exécutable
- il fait un breakpoint
- il m'affiche la valeur se trouvant dans la mémoire dans une adresse que je lui précise.

et c'est tout.

Mais, le problème c'est que je dois avoir un très grand nombre de valeurs pour mon étude. Donc, j'ai fait dedans une boucle 'for'.
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
18 août 2007 à 12:03
C'est que la lib que tu utilises est buggée, ya pas de raison qu'un breakpoint et une lecture de valeur dans la mémoire génére un problème comme celui-là.

Quoique, faire ça un grand nombre de fois...
0
Marouanos Messages postés 26 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 2 juin 2010 1
18 août 2007 à 12:57
kilian, je crois que j'ai localisé le problème. Quand j'ouvre mon programme stage.py avec IDLE (python GUI) et je fais "run", il y a autant de fenêtres noires (celles de l'invite de commande de windows) qui s'ouvrent que le nombre que je donne en paramètre.
A priori, mon programme stage.py exécute le .exe et le laisse ouvert (après avoir lui mettre un breakpoint). Ainsi, la RAM se consomme énormémant en fonction du nombre de fois que stage.py exécute le .exe

La question maintenat est: y'a-t-il des commandes python pour fermer un .exe qui est arrêtré sur un breakpoint?
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
18 août 2007 à 13:31
Ca dépend, tu utilises quoi comme librairie pour faire ce débuggage?
0
Marouanos Messages postés 26 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 2 juin 2010 1
18 août 2007 à 17:05
pydbg
0
Marouanos Messages postés 26 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 2 juin 2010 1
19 août 2007 à 13:31
Alors, en résumé: mon problème était de manque de RAM lorsque j'exécute un programme .py qui fait appel plusieurs fois à un .exe, lui fait un breakpoint et extrait une valeur de la mémoire.

Ce que j'ai constaté c'est que dans chaque exécution du .py, il'ya des fenêtres d'invite de commade qui s'ouvrent et ne se ferment pas! Donc, j'ai sû qu'il faut terminer l'exécution d'un .exe avant de passer à l'appel de l'autre, ceci se fait par la suppression du braekpoint:
 myhandle.bp_del(address)
 myhandle.terminate_process()
0