具有ASCOM安全阵列问题的COMNDARRAY类型

2024-09-30 19:29:44 发布

您现在位置:Python中文网/ 问答频道 /正文

据说comtypes safearray作为数组上下文管理器将加快从COM读取大型数组的速度。我在ASCOM相机课上试过。ASCOM可以返回ImageArray int-safearray和ImageArrayVariant-safearray。 当使用ImageArrayVariant时,它可以成功地完成,但时间远远超过正常的np.array(元组)方式。 使用ImageArray时,库总是会出错

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

我不知道为什么。comtypes文档中的描述如下: 默认情况下,comtypes会逐项将SAFEARRAY输出参数转换为python对象的元组。在处理大型安全阵列时,这种转换可能代价高昂。Comtypes在safearray上下文管理器(来自Comtypes.safearray)中提供了一个用于修改此行为以返回NumPy数组的函数。这种改变的行为是在SAFEARRAY的内存副本上放置一个ndarray,这比为每个项调用python要快。如果失败,仍然可以逐项创建NumPy数组。上下文管理器是线程安全的,在一个线程上使用上下文管理器不会影响其他线程上的行为

谢谢


Tags: numpycom管理器数组线程速度int元组