Многопоточность win32com: CoGetInterfaceAndReleaseStream зависает
Я пытаюсь настроить работу потоков с программой для запроса к серверу Historian, чтобы можно было выполнять параллельные запросы. Я хочу иметь один экземпляр сервера, который я могу передать программе, а не создавать экземпляр объекта сервера в каждом рабочем потоке.
У меня проблема в том, что вызов CoGetInterfaceAndReleaseStream вызывает зависание программы при использовании "iHistorian_SDK.Server", но прекрасно работает при использовании чего-то другого, например, "Excel.Application". Это ограничение с Historian SDK? Есть ли способ заставить его работать?
import threading
import time
import pythoncom
import win32com.client
def run_in_thread(hist_id):
# Initialize
pythoncom.CoInitialize()
# Get instance from the id
hist = win32com.client.Dispatch(
pythoncom.CoGetInterfaceAndReleaseStream(hist_id, pythoncom.IID_IDispatch))
time.sleep(5)
pythoncom.CoUninitialize ()
if __name__ == '__main__':
pythoncom.CoInitialize () # Is this needed in the main thread?
hist = win32com.client.Dispatch("iHistorian_SDK.Server") #"Excel.Application"
hist_id = pythoncom.CoMarshalInterThreadInterfaceInStream(pythoncom.IID_IDispatch, hist)
thread = threading.Thread(target=run_in_thread, kwargs={'hist_id': hist_id})
thread.start()
thread.join()