首页 > 解决方案 > comtypes ndarray 与 ASCOM safearray 问题

问题描述

据说comtypes safearray_as_ndarray 上下文管理器将加快从COM 读取大数组的速度。我用 ASCOM 相机类试过了。ASCOM 可以返回 ImageArray int safearray 和 ImageArrayVariant variant 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 提供了一个 safearray_as_ndarray 上下文管理器(来自 comtypes.safearray),用于修改此行为以返回 NumPy 数组。这种改变的行为是将 ndarray 放在 SAFEARRAY 内存的副本上,这比为每个项目调用 python 更快。当这失败时,仍然可以逐项创建 NumPy 数组。上下文管理器是线程安全的,因为在一个线程上使用上下文管理器不会影响其他线程上的行为。

谢谢。

标签: pythoncomtypesascom

解决方案


推荐阅读