Lancer un logiciel en boucle avec un batch

Fermé
ShiningLink Messages postés 48 Date d'inscription lundi 16 janvier 2012 Statut Membre Dernière intervention 3 juin 2020 - 11 avril 2013 à 14:36
ShiningLink Messages postés 48 Date d'inscription lundi 16 janvier 2012 Statut Membre Dernière intervention 3 juin 2020 - 13 avril 2013 à 11:58
Bonjour,

Comme je manipule de très grosses quantités de données que je traite sous Matlab, j'arrive très rapidement à un "Out of Memory", qui nécessite le redémarrage de Matlab.

J'ai réussi à découper mes scripts de sorte à ce que n'importe lequel des scripts puisse être exécuté après un redémarrage de matlab. En revanche, j'ai toujours besoin de fermer puis relancer matlab après l'exécution d'un des scripts avant de passer au suivant.

Du coup, ce que je voudrais faire, c'est d'automatiser tout ça en créant un batch qui :
- lance matlab,
- exécute un script,
- UNE FOIS L'EXECUTION TERMINEE, ferme Matlab,
- relance Matlab,
- exécute un nouveau script
- etc...

Là où je bloque, c'est que dans mes quelques essais le batch s'exécute entièrement avant de lancer mes instances Matlab.
Du coup, j'ai 3 Matlab d'un coup qui se lancent, et ça ne résoud pas mon problème de RAM.

Une idée?

Merci d'avance !
A voir également:

1 réponse

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
11 avril 2013 à 16:00
hello
essayer avec
start /wait matlab
sinon dans le script, à la fin, exécuter une commande qui tue matlab ?
1
ShiningLink Messages postés 48 Date d'inscription lundi 16 janvier 2012 Statut Membre Dernière intervention 3 juin 2020 1
11 avril 2013 à 20:18
Merci pour la réponse, mais aucune des solution ne fonctionne.

En fait j'ai déjà essayé la commande "start /wait ..."
ça fonctionne très bien avec Excel, mais bizarrement pas avec Matlab.
En gros, j'ai essayé ce script :
start /wait excel.exe
start /wait excel.exe


Dans ce cas, une instance excel s'ouvre, je peux faire ce que je veux avec, et au moment où je la ferme, une seconde instance s'ouvre. C'est exactement ce que je veux.
Après, j'ai essayé ça :
start /wait matlab.exe
start /wait matlab.exe


Et là, sans aucune raison, 2 instances matlab se lancent simultanément....

Sinon je ne vois pas trop pourquoi kill le processus matlab.exe à la fin du batch, le but étant surtout de m'assurer que l'instance en cours ait fini son script avant qu'une autre se lance : /
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 12/04/2013 à 08:26
je ne connais pas matlab, mais n' a -t-il pas une option qui exécute le script en mode batch et termine :
matlab -r script
0
ShiningLink Messages postés 48 Date d'inscription lundi 16 janvier 2012 Statut Membre Dernière intervention 3 juin 2020 1
12 avril 2013 à 09:42
Bonjour,

Si effectivement il y a une commande ('exit') qui pemet de fermer matlab à la fin de l'exécution du script, mais encore une fois, ça n'est pas mon problème... Je veux m'assurer que la seconde instance Matlab ne se lance qu'une fois la première fermée, car tout est un problème de RAM. Si les 2 instances se lancent en même temps, la RAM disponible sera divisée par 2 et mes 2 instances Matlab seront "out of memory"...
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
12 avril 2013 à 09:50
j'ai bien compris, mais avec l'option -r script, est-ce que matlab termine, donc exit, avant d'exécuter le suivant ?
sinon vérififer avec tasklist si il tourne et le tuer avec taskkill
0
ShiningLink Messages postés 48 Date d'inscription lundi 16 janvier 2012 Statut Membre Dernière intervention 3 juin 2020 1
13 avril 2013 à 11:58
Non, la commande "exit" à la fin du script Matlab me permet de fermer l'instance qui a exécuté le script, mais ça ne lance pas les instances séquentiellement pour autant.
Finalement, à défaut de mieux, j'ai utilisé cette méthode trouvée ici :
https://www.mathworks.com/matlabcentral/answers/5982-batch-files-and-matlab-sequential-execution-and-start-wait

L'idée est d'avoir une instance matlab qui tourne en permanence, et qui va appeler séquentiellement des batch, qui eux même vont appeler une seule instance matlab.
Entre chaque appel de batch, j'évalue périodiquement le nombre d'instances matlab lancée dans le task manager ([r,s] = system('tasklist /FI "imagename eq matlab.exe" /fo table /nh').

Je suis toujours preneur d'un moyen plus propre de réaliser tout ça :)
0