[python-win32] pythoncom, multithreading, Word
Cédric Delfosse
cedric.delfosse@freealter.com
06 Jun 2002 16:32:06 +0200
The trick is to launch multiple Word with
win32com.client.DispatchEx('Word.Application').
Then it works better.
Le mer 05/06/2002 à 15:54, Cédric Delfosse a écrit :
> Hello,
>
> I'm writing a little server to convert MSWord document (windows 2000 pro
> with msoffice 2000 premium), using the ThreadingTCPServer class of
> python.
>
> In the handle part of my BaseRequestHandler, I do something like this:
>
> pythoncom.CoInitializeEx(pythoncom.COINIT_APARTMENTTHREADED)
> w = win32com.client.Dispatch('Word.Application')
> w.Visible = 0
> w.DisplayAlerts = 0
> w.Documents.Open( FileName = filenamein )
> wc = win32com.client.constants
> w.ActiveDocument.SaveAs( FileName = filenameout, FileFormat =
> wc.wdFormatHTML )
> w.Documents.Close(wc.wdDoNotSaveChanges)
> w.Quit()
> w = None
>
> It works fine, except when multiple threads are making COM call in the
> same time. There I'm getting lots of exception, telling me that my call
> are discarded.
>
> I don't understand why (my COM knowledge is very basic and I didn't read
> the python/win32 book).
>
> I have found a site at http://ecpspooler.sourceforge.net/, where the guy
> propose a spooler to pipe COM in a queue, because:
>
> """
>
> The problem, Microsoft Word can be automated externally to generate
> documents. It is, however, a single use COM server which means only a
> single instance can run at a time. If two programs try to generate Word
> documents at the same time they will, at best, write text back and forth
> into the same document, and, at worst, crash Word all together.
>
> """
>
> I'm a little perplex. If I do this in a python session:
>
> >>> w = win32com.client.Dispatch('Word.Application')
> >>> w.Documents.Open( "C:\\toto.doc" )
> >>> w2 = win32com.client.Dispatch('Word.Application')
> >>> w.Documents.Open( "C:\\titi.doc" )
>
> It works fine.
> So why not when I use thread ? Should I catch every COM call and redo
> them when they failed ? I hope not :)
>
> Thanks in advance for your answer.
>
> --
> Cédric Delfosse Free&ALter Soft
> 152, rue de Grigy - Technopole Metz 2000 57070 METZ
> tel : 03 87 75 11 74 fax : 03 87 75 19 26
>
>
>
> _______________________________________________
> Python-win32 mailing list
> Python-win32@python.org
> http://mail.python.org/mailman/listinfo/python-win32
--
Cédric Delfosse Free&ALter Soft
152, rue de Grigy - Technopole Metz 2000 57070 METZ
tel : 03 87 75 11 74 fax : 03 87 75 19 26