Skip to content

Instantly share code, notes, and snippets.

@Garphy
Forked from vlasenkov/pycom.py
Created November 30, 2021 12:28
Show Gist options
  • Save Garphy/40470e8107496069cec97b4192cb2ed4 to your computer and use it in GitHub Desktop.
Save Garphy/40470e8107496069cec97b4192cb2ed4 to your computer and use it in GitHub Desktop.
win32com multithreading example (python 2)
# win32com multithreading example
import sys
import time
from threading import Thread
 
sys.coinit_flags = 0  # pythoncom.COINIT_MULTITHREADED == 0
from pythoncom import (CoInitializeEx, CoUninitialize,
                       COINIT_MULTITHREADED, PumpWaitingMessages)
from win32com.client import Dispatch, WithEvents
 
# COM event handlers
class FirstEventHandler:
    def OnWorkbookOpen(self, Wb):
        print "First thread:  open workbook %s" % Wb.FullName
 
class SecondEventHandler:
    def OnWorkbookBeforeClose(self, Wb, Cancel):
        print "Second thread: close workbook %s" % Wb.FullName
 
# main thread
def firstThread():
    client = Dispatch("Excel.Application")
    WithEvents(client, FirstEventHandler)
    # launch the second thread
    thread = Thread(target=secondThread, args=(client,))
    thread.start()
    # event loop 1
    while True:
        PumpWaitingMessages()
        time.sleep(0.5)
 
# other thread worker function
def secondThread(client):
    CoInitializeEx(COINIT_MULTITHREADED)
    WithEvents(client, SecondEventHandler)
    # event loop 2
    while True:
        PumpWaitingMessages()
        time.sleep(0.5)
    CoUninitialize()
 
if __name__ == '__main__':
    firstThread()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment