Vitesse d'exécution d'un script utilisant une connexion à un composant COM

Le
Thomas Paviot
Bonjour à tous,

J'ai remarqué un fonctionnement que je ne comprends pas lors de
l'exécution d'un script python se connecant àun server COM à l'aide des
extensions Windows pour Python.

J'ai modifié un des scripts fourni avec la distribution pywin32 :
l'objectif est de mesurer le temps d'exécution d'un script qui ouvre
Word, écrit 30 lignes de texte en couleur verte et ferme Word.

Lorsque je lance ce script, la durée d'exécution sur mon ordinateur de
bureau est de 19s en moyenne.

J'ai remarqué par hasard ce fonctionnement inexpliqué : si, pendant
l'exécution du script, je clique droit 2 fois dans la fenêtre Word (un
menu déroulant s'ouvre permettant le copier, coller etc.), la vitesse
d'exécution est très sensiblement augmentée : la durée totale chute à
environ 11s.

J'ai constaté le même phénomène pour des scripts se connectant à des
serveurs COM de SolidWorks ou Catia V5 (dans ce cas-là, la durée
d'exécution du script est divisée par 4!), et sur un ordinateur différent.

Ce gain de vitesse m'intéresse fortement. Je me demande donc comment
arriver à en profiter, sans pour autant avoir à afficher un menu déroulant.

Je joins le script en post scriptum.

Thomas Paviot

#
# Benchmark win32com
#
import win32com.client
import time


word = win32com.client.Dispatch("Word.Application")
word.Visible = 1
doc = word.Documents.Add()
wrange = doc.Range()

init_time=time.time()
for i in range(30):
wrange.InsertAfter("Python ligne numero :%d" % i)
paras = doc.Paragraphs
for i in range(len(paras)):
p = paras[i]()
p.Font.ColorIndex = 4
p.Font.Size = 16

final_time=time.time()
doc.Close(SaveChanges = 0)
word.Quit()
print "Duree d'execution :",final_time-init_time
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Bruno Desthuilliers
Le #513243
Bonjour à tous,

J'ai remarqué un fonctionnement que je ne comprends pas lors de
l'exécution d'un script python se connecant àun server COM à l'aide des
extensions Windows pour Python.

(snip)


J'ai remarqué par hasard ce fonctionnement inexpliqué : si, pendant
l'exécution du script, je clique droit 2 fois dans la fenêtre Word (un
menu déroulant s'ouvre permettant le copier, coller etc.), la vitesse
d'exécution est très sensiblement augmentée


(snip)

Ce gain de vitesse m'intéresse fortement. Je me demande donc comment
arriver à en profiter, sans pour autant avoir à afficher un menu déroulant.



AMHA, c'est plus un problème Windows/COM qu'un problème Python, tu a
donc plus de chances d'avoir les bonnes réponses sur un ng dédié à
Windows...

<hs>
Sur le fond, je pense que ça doit être dû au fait qu'en cliquant dans la
fenêtre de word, tu ramène word au premier plan, ce qui doit jouer au
niveau des priorités assignées par le systèmes aux applis en court...
(mais bon, vu ma connaissance de Windows, il est parfaitement possible
que cette explication soit tout à fait fantaisiste...)
</hs>

Méta-MCI
Le #512991
Bonsoir !

3ème envoi (...)

---------------------------

Bonjour !

2ème envoi (...)

---------------------------


Bonjour !

Lors du pilotage de Word par Python, via COM, j'obtiens une meilleure
vitesse en travaillant en mode invisible, et en rendant word visible au
dernier moment, lorsque toutes les modifs/traitements sont terminés.

En pratique, j'utilise :
self.w.Visibleúlse
et
self.w.Visible=True


Sinon, tu peux regarder la classe que j'ai pondu (Cot ! Cot ! Cot !), là :
http://mclaveau.com/ress/python/pxword.htm
(adresse aussi publiée dans le Wiki)


@-salutations

Michel Claveau
Publicité
Poster une réponse
Anonyme