[python-win32] Reusing a local com server object

Ross McKerchar it at crummock.com
Tue Mar 6 13:51:20 CET 2007


I am having trouble connecting to an already running python com server.

I have set CLSCTX_LOCAL_SERVER for my com object and I am using the 
"GetObject" function in my vbscripts which connect to the com server.

I have written a simple test server that behaves very similarly to my 
real server (except the thread will actually do some work)

------------------------------------------------------------
sleeper = threading.Thread(target=time.sleep,args=(20,))

class Test(object):
    _public_methods_ = ["go"]
    _reg_progid_ = "pythonutils.test"
    _reg_clsid_ = "{57E47876-69CB-4822-92F1-B8D2716F54A4}"
    _reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER

    def go(self):
        if sleeper.isAlive():
            return "Server is already running"
        else:
            sleeper.start() #start a thread that sleep for 20 seconds
            return "Server NOT running"
------------------------------------------------------------

Now, if I run two test clients it works fine if client #2 get's a 
reference to my com server before client #1 stops running (i.e. client#1 
sleeps for 10 seconds and I run client#2, in a seperate process before 
client#1 finishes).

However, if I run my test clients sequentially each one creates a new 
pythonw process. The old com server is definitely still running, 
GetObject just decides to return a new one and I am unsure how the 
change this behaviour.

After browsing Mark's win32 book I've tried playing with the 
_reg_threading_ but I'm not convinced it's relevant (I full admit I'm 
dont understand com threading 100%). I also thought I was onto something 
with the pythoncom.REGCLS_MULTIPLEUSE variable until I discovered that 
this is used by default (in win32com.server.factory).

Any suggestions would be much appreciated - even just some key phrases 
that may help energise my search efforts...

Many thanks,

-ross



More information about the Python-win32 mailing list