Блокировка API

Интерфейсы, описанные в этой главе, используются для блокировки всех API-интерфейсов, позволяя вам заблокировать API так, чтобы его мог использовать только текущий экземпляр Device, предотвращая использование API другими пользователями или процессами. Вы можете установить время блокировки по умолчанию или периодически обновлять блокировку самостоятельно. Рекомендуется использовать метод периодического обновления. Вы также можете принудительно снять блокировку интерфейса. Надежный процесс блокировки выглядит так: получение блокировки -> создание потока для периодического обновления блокировки -> снятие блокировки.

Получение блокировки

Получает блокировку. Эта блокировка будет автоматически снята через 60 секунд. После автоматического снятия другие клиенты смогут получить блокировку. Вы можете изменить это время, но если оно будет слишком большим, то при аварийном завершении скрипта вы рискуете навсегда потерять доступ к устройству, и для восстановления соединения может потребоваться его перезагрузка. Этот интерфейс является повторно входимым (re-entrant), при повторном вызове он эквивалентен _refresh_lock.

d._acquire_lock(leaseTime=60)

Снятие блокировки

Принудительно снимает блокировку API, после чего другие клиенты смогут получить блокировку.

d._release_lock()

Обновление блокировки

Обновляет блокировку, устанавливая время ее истечения равным leaseTime при каждом вызове. Периодически вызывайте этот интерфейс для поддержания блокировки API. Аналогично, если leaseTime будет слишком большим, то при аварийном завершении скрипта вы рискуете навсегда потерять доступ к устройству.

d._refresh_lock(leaseTime=60)