Многопоточность 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()

0 ответов

Другие вопросы по тегам