I am creating a COM client within a thread and performing several
operations with this client. Each thread is spawned from a server that uses
Python's socketserver module which has built-in threading support.

When I am loading and using this COM object there is an expected spike in
memory usage by python.exe. With 10 concurrent threads there is a peak in
memory usage of about 500Mb. However when the operations are finished and
the COM object is apparently released, there are 50Mb of additional memory
used by the process than before. If I then spawn 10 additional threads
using the same server there are 13Mb additional used by python.exe after
those COM objects are closed. Eventually every 10 additional concurrent
threads adds approximately 6Mb after they are done. When I end the entire
python.exe process, all the memory is released.

I have simplified the following code to mimic how the socketserver uses
threadding and the problem is the exact same.

import win32com.clientimport threadingimport pythoncom
def CreateTom():
    pythoncom.CoInitialize()
    tom = win32com.client.Dispatch("TOM.Document")
    tom.Dataset.Load("FileName")
    tom.Clear()
    pythoncom.CoUninitialize()
for i in range(50):
    t = threading.Thread(target = CreateTom)
    t.daemon = False
    t.start()

I understand that I will unlikely get any support here around the specific
COM library (it is an IBM product used in Market Research known as the
TablesObjectModel). However I want to know if there is anything, ANYTHING,
additional that I can do to release this memory. I have read about
Apartments in COM but it sounds like pythoncom.CoInitialize should take
care of this for me. Any help would be appreciated.
_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to