1

comtypes safearray_as_ndarray コンテキスト マネージャを使用すると、COM からの大きな配列の読み取り速度が向上すると言われています。ASCOMカメラクラスで試してみました。ASCOM は ImageArray int safearray および ImageArrayVariant バリアント safearray を返すことができます。ImageArrayVariant を使用すると、正常に実行できますが、通常の np.array(tuple) の方法よりもはるかに時間がかかります。ImageArray を使用すると、ライブラリで常にエラーが発生する

  File "C:\ProgramData\Anaconda3\lib\site-packages\comtypes\__init__.py", line 280, in __getattr__
raise AttributeError(name)

どうしてか分かりません。comtypes doc からの説明は次のとおりです。 デフォルトでは、comtypes は SAFEARRAY 出力引数をアイテムごとに python オブジェクトのタプルに変換します。大きな SAFEARRAY を扱う場合、この変換にはコストがかかる可能性があります。Comtypes は、この動作を変更して NumPy 配列を返すための safearray_as_ndarray コンテキスト マネージャー (comtypes.safearray から) を提供します。この変更された動作は、safearray のメモリのコピーに ndarray を配置することです。これは、アイテムごとに python を呼び出すよりも高速です。これが失敗した場合でも、アイテムごとに NumPy 配列を作成できます。コンテキスト マネージャーはスレッド セーフです。あるスレッドでコンテキスト マネージャーを使用しても、他のスレッドの動作には影響しません。

ありがとう。

4

0 に答える 0