Lancer un logiciel en boucle avec un batch
ShiningLink
Messages postés
48
Date d'inscription
Statut
Membre
Dernière intervention
-
ShiningLink Messages postés 48 Date d'inscription Statut Membre Dernière intervention -
ShiningLink Messages postés 48 Date d'inscription Statut Membre Dernière intervention -
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 !
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:
- Lancer un logiciel en boucle avec un batch
- Money logiciel - Télécharger - Comptabilité & Facturation
- Logiciel - Guide
- Ce logiciel gratuit répare automatiquement votre PC quand Windows a des problèmes - Guide
- Logiciel de sauvegarde gratuit - Guide
- Logiciel montage vidéo gratuit windows 10 - Guide
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 : /
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"...
sinon vérififer avec tasklist si il tourne et le tuer avec taskkill
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 :)