O'Reilly logo

Python Programming On Win32 by Mark Hammond, Andy Robinson

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

What Are the Apartment Rules?

For all this complicated machinery to work, there are a number of rules COM imposes on programs that use COM.

The synchronization of calls between different threads is achieved using Windows messages. This means that all threads in a single-threaded apartment must run a message loop to allow this mechanism to work. If the program is a GUI (such as PythonWin) this is no problem, but for most other applications, including Windows Services, this may not be an existing requirement. In practice, this means if any of your threads that exist in a single-threaded COM apartment need to wait on some synchronization object, you may need to use either the win32event.MsgWaitForSingleObject() or win32event.MsgWaitForMultipleObjects() calls so you can still process messages at the appropriate time. If you have no other message requirements, calling pythoncom.PumpWaitingMessages() processes all messages currently in the thread’s queue. This technique is demonstrated in the example in the next section.

The other major rule imposed by the COM threading models is that it’s illegal to pass COM interface pointers (and therefore the Python wrappers) between threads. As you may be passing the pointer from the same apartment to a different apartment, you may be avoiding or violating the synchronization mechanisms (and other optimizations) provided by COM. To pass interface objects between threads, you must use the pythoncom.CoMarshalInterThreadInterface-InStream() and pythoncom.CoGetInterfaceAndReleaseStream() ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required