0

同時クエリを実行できるように、ヒストリアン サーバーにクエリを実行するプログラムでスレッドを動作させようとしています。すべてのワーカー スレッドでサーバー オブジェクトをインスタンス化するのではなく、プログラムで受け渡しできるサーバーの単一のインスタンスが必要です。

私が抱えている問題は、「iHistorian_SDK.Server」を使用すると CoGetInterfaceAndReleaseStream を呼び出すとプログラムがハングすることですが、「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()
4

0 に答える 0