Applescript - différences de temps d'exécution

lyd

Membre enregistré
23 Juillet 2012
2
0
St Etienne
Bonjour,

Je suis en train de découvrir l'applescript, et j'ai un problème que je ne parviens pas à résoudre... Je sollicite donc vos lumières !

Le script : mon script est en deux parties,
- une sorte de librairie avec des fonctions de base (genre affichage dans un terminal, calcul du temps d'exécution, etc.)
- le script à proprement parler, qui modifie un fichier Excel 2011 (pas de commentaire là-dessus) et fait appel aux fonctions de base du premier script.
- je souhaiterais pouvoir lancer mon second script via le parchemin dans la barre de menu sur la machine cible, un iMac sous Snow Leopard.

Les acteurs :
- MacBook Pro (OS X 10.7.4)
- iMac 9,1 (OS X 10.6.8)

Le pitch :
- sur mon McBook Pro, en mode admin comme en mode utilisateur, sous Smile ou sous l'éditeur natif, j'obtiens un temps d'exécution de l'ordre de 1min40s avec les .scpt
- sur mon McBook Pro toujours, en mode admin comme en mode utilisateur, j'ai le même temps d'exécution si je lance le script sous forme d'appli à partir du parchemin (en .app)
- encore sur mon MacBook Pro, j'obtiens un temps de réponse de 34min si je lance le script .scpt à partir de l'utilitaire (parchemin)
- sur l'iMac, en mode utilisateur, sous l'éditeur natif j'ai un temps de réponse de 2min47s avec les scpt
- sur l'iMac, si j'exécute le même script en .app ou .scpt sur le même fichier Excel via le parchemin, mon temps d'exécution s'effondre, je dépasse la demi-heure !

Private investigations :
1. Le % d'utilisation processeur:
- avec l'iMac+éditeur (.scpt), l'occupation processeur du thread Excel est de 80% environ
- avec iMac+parchemin (.app), on passe à moins de 1%
- j'ai utilisé renice en su pour changer la priorité du thread Excel, mais cela n'a rien changé.

2. J'ai sauvé les .scpt sur l'iMac en .app, au cas où il y ait des différences de traitement des .app entre Lion et Snow Leopard. Pas de changement.

3. J'ai exécuté dans l'éditeur le script principal en .scpt faisant appel au script librairie compilé (.app) : même temps de réponse désastreux.

4. Réduisons le champ d'investigation : j'ai reformaté mon script principal pour inclure directement les fonctions décrite dans la librairie attachée.
Toujours 30min d'exécution pour le .app vs 2min pour le .scpt sur le iMac

5. Le lancement de mon .app sans passer par le menu de l'utilitaire applescript me donne le même mauvais temps : 30min environ sur le iMac.

6. Mes recherches sur le net n'ont pas été fructueuses, j'ai tout juste trouvé la question déjà posée, mais pas d'embryon de réponse.

Ma question :
Pourquoi ces différence énorme de temps d'exécution ?
Quelle différence entre un script lancé depuis l'éditeur, depuis l'utilitaire, en .app, en .scpt ?
Auriez-vous des pistes à me proposer ? Je suis un peu à court d'idées...
Doc ? Outils d'investigation ?

Question annexe : à la base, je suis intervenu sur ce script car il y avait un problème un peu curieux : le script se relançait tout seul. J'ai découvert que la cause de cette boucle inopinée était un bug dans le script, et j'ai même réussi à reproduire ce comportement avec un autre bug (genre j'oublie de préciser qu'une fonction que j'utilise se trouve dans la librairie jointe).
Avez-vous déjà vu ce comportement ?
Du coup, je mets systématiquement une assertion en début de script pour vérifier qu'il n'a pas déjà tourné, mais je trouve cela curieux...

(note : très bon, le bouton "vérifiez que la question n'a pas déjà été posée")
 
Dernière édition:
Je réponds à ma propre question...
Enfin non, je veux dire : j'ai trouvé une parade à mon problème.

Suivant l'idée énoncée dans ce post sur MacScripter, j'ai créé un fichier quasi vide avec pour seule ligne
Bloc de code:
run script file ("mon script tout lent qui met 34min à s'exécuter")

C'est avec une grande surprise, un soulagement et la déception de n'avoir pas compris que j'ai constaté un temps d'exécution de 2 min :up:

Donc voilà pour ceux qui rencontrent ce genre de problème, je reste avide d'une explication rationnelle.