Comtipes ndarray с проблемой безопасности ASCOM - PullRequest
0 голосов
/ 02 февраля 2020

Говорят, что менеджер контекста 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 do c приведено ниже: По умолчанию comtypes преобразует выходные аргументы SAFEARRAY в кортежи объектов python для каждого элемента в отдельности. При работе с большими SAFEARRAY это преобразование может быть дорогостоящим. Comtypes предоставляет менеджер контекста safearray_as_ndarray (из comtypes.safearray) для изменения этого поведения, возвращая массив NumPy. Это измененное поведение - поместить ndarray поверх копии памяти SAFEARRAY, что быстрее, чем вызов python для каждого элемента. Когда это не удается, массив NumPy все еще может быть создан для каждого элемента отдельно. Диспетчер контекста является поточно-ориентированным, так как использование диспетчера контекста в одном потоке не влияет на поведение в других потоках.

Спасибо.

...