Каталог товаров

Модули MicroPython

В следующем списке содержатся стандартные библиотеки Python, специальные библиотеки MicroPython, и специальные модули для Pycom, которые доступны на устройствах Pycom.

Стандартные библиотеки Python были адаптированы, чтобы соответствовать философии MicroPython. Они обеспечивают основные функциональные возможности этого модуля и предназначены для замены стандартной библиотеки Python.

Некоторые модули доступны по u-name, а также по их non-u-name. Non-u-name может быть переопределено файлом с таким же именем. Например, импорт json сначала будет искать файл json.py или каталог json и загружать этот пакет, если он найден. Если ничего не найдено, то это приведет к загрузке встроенного модуля ujson.

Массив

См. статью Массив Python для получения дополнительной информации.

Поддерживаемые коды формата: b, B, h, H, i, I, l, L, q, Q, f, d (последние 2 зависят от поддержки формата с плавающей запятой).

Классы

class array.array(typecode[, iterable])

Создаёт массив с элементами данного типа. Начальное содержимое массива задается итерацией. Если она не указана, создается пустой массив.

Методы

array.append(val)

Добавляет новый элемент в конец массива, увеличив его.

array.extend(iterable)

Добавляет новые элементы, содержащиеся в итерируемом конце массива, увеличивая его.

CMATH

Модуль cmath предоставляет некоторые основные математические функции для работы с комплексными числами. Для этого модуля требуется поддержка формата с плавающей точкой.

Методы

cmath.cos(z)

Возвращает косинус z.

cmath.exp(z)

Возвращает экспоненту z.

cmath.log(z)

Возвращает натуральный логарифм z. Срез ветки проходит вдоль отрицательной действительной оси.

cmath.log10(z)

Возвращает логарифм z с основанием 10. Срез ветки проходит вдоль отрицательной действительной оси.

cmath.phase(z)

Возвращает фазу числа z в диапазоне (-pi, + pi).

cmath.polar(z)

Возвращает полярную форму z в виде кортежа.

cmath.rect(r, phi)

Возвращает комплексное число с модулем r и фазой phi.

cmath.sin(z)

Возвращает синус z.

cmath.sqrt(z)

Возвращает квадратный корень из z.

Константы

  • cmath.e: основание натурального логарифма
  • cmath.pi: отношение длины окружности к ее диаметру

GC

Методы

gc.enable()

Включает автоматическую сборку мусора.

gc.disable ()

Отключает автоматическую сборку мусора. Память все еще может быть выделена, сборка мусора все еще может быть инициирована вручную с помощью gc.collect().

gc.collect()

Запускает сборку мусора.

gc.mem_alloc()

Возвращает количество выделенных байтов памяти.

gc.mem_free()

Возвращает количество байтов доступной оперативной памяти.

Math

Модуль Math предоставляет некоторые основные математические функции для работы с числами с плавающей запятой. Для этого модуля требуется поддержка данного формата.

Методы

math.acos(х)

Возвращает обратный косинус х.

math.acosh(х)

Возвращает обратный гиперболический косинус x.

Math.asin(х)

Возвращает обратный синус х.

math.asinh (х)

Возвращает обратный гиперболический синус x.

math.atan(х)

Возвращает обратный тангенс х.

math.atan2(у, х)

Возвращает значение обратного тангенса y / x.

math.atanh(х)

Возвращает обратный гиперболический тангенс x.

Math.ceil(х)

Возвращает целое число, округленное по x к положительной бесконечности.

math.copysign (x, y)

Возвращает x со знаком y.

Math.cos(х)

Возвращает косинус х.

math.cosh(х)

Возвращает гиперболический косинус x.

math.degrees(х)

Возвращает радианы x в градусах.

math.erf(х)

Возвращает функцию ошибки x.

math.erfc(х)

Возвращает дополнительную функцию ошибки x.

Math.exp(х)

Возвращает экспоненту x.

math.expm1(х)

Возвращает exp(x) - 1

math.fabs(х)

Возвращает абсолютное значение х.

Math.floor(х)

Возвращает целое число, округленное по x к отрицательной бесконечности.

math.fmod(x, y)

Возвращает остаток х / у.

math.frexp(х)

Разлагает число с плавающей запятой в его мантиссу и показатель степени. Возвращаемым значением является кортеж (m, e), такой, что x == m * 2**e . Если x == 0, то функция возвращает (0.0, 0), в противном случае выполняется соотношение 0.5 <= abs (m) <1.

math.gamma(х)

Возвращает гамма-функцию x.

math.isfinite (х)

Возвращает True, если x конечно.

math.isinf (х)

Возвращает True, если x бесконечно.

math.isnan(х)

Возвращает True, если x не является числом

math.ldexp(x, exp)

Возвращает x * (2**exp).

math.lgamma(х)

Возвращает натуральный логарифм гамма-функции x.

Math.log(х)

Возвращает натуральный логарифм х.

math.log10(x)

Возвращает десятичный логарифм х.

math.log2(х)

Возвращает двоичный логарифм х.

math.modf(х)

Возвращает кортеж из двух чисел, являющихся дробной и неотъемлемой частями x. Оба возвращаемых значения имеют тот же знак, что и x.

math.pow(x, y)

Возвращает х в степени у.

math.radians(х)

Возвращает градусы х в радианах.

Math.sin(х)

Возвращает синус х.

math.sinh(х)

Возвращает гиперболический синус x.

Math.sqrt(х)

Возвращает квадратный корень из х.

Math.tan(х)

Возвращает тангенс х.

math.tanh(х)

Возвращает гиперболический тангенс x.

math.trunc(х)

Возвращает целое число, округленное по x к 0.

Константы

  • math.e: основание натурального логарифма
  • math.pi: отношение длины окружности к ее диаметру

Micropython

Методы

micropython.alloc_emergency_exception_buf(size)

Выделяет оперативную память для буфера аварийного исключения (хороший размер составляет около 100 байтов). Буфер используется для создания исключений в тех случаях, когда нормальное распределение ОЗУ не будет выполнено (например, в обработчике прерываний), и, следовательно, дает полезную информацию трассировки в этих ситуациях.

Хороший способ использовать эту функцию - поместить ее в начало основного скрипта (например, boot.py или main.py), и тогда буфер чрезвычайных исключений будет активен для всего кода, следующего за ним.

micropython.const(expr)

Используется для объявления, что выражение является константой, чтобы компиляция могла оптимизировать его. Использование этой функции должно быть следующим:

from micropython import const  

CONST_X = const(123)

CONST_Y = const(2 * CONST_X + 1)

Константы, объявленные таким образом, по-прежнему доступны как глобальные переменные вне модуля, в котором они объявлены. С другой стороны, если константа начинается с подчеркивания, то она скрыта: недоступна как глобальная переменная и не занимает память во время исполнения.

Эта const-функция распознается синтаксическим анализатором MicroPython непосредственно и предоставляется как часть модуля micropython, главным образом для написания сценариев, которые выполняются как в CPython, так и в MicroPython, согласно приведенному выше шаблону.

micropython.opt_level([level])

Если указан level, то эта функция устанавливает уровень оптимизации для последующей компиляции скриптов и возвращает None. В противном случае возвращает текущий уровень оптимизации.

micropython.mem_info([verbose])

Печатает информацию об используемой в данный момент памяти. Если дан подробный аргумент, то выводится дополнительная информация.

Информация, которая выводится на печать, зависит от реализации, но в настоящее время включает объем используемого стека и кучи. В подробном режиме он распечатывает всю кучу, указывая, какие блоки используются, а какие свободны.

micropython.qstr_info([verbose])

Печатает информацию о строках, использующихся в настоящее время. Если дан подробный аргумент, то выводится дополнительная информация.

Информация, которая выводится на печать, зависит от реализации, но в настоящее время включает количество интернированных строк и объем используемой ими оперативной памяти. В подробном режиме он печатает имена всех строк, содержащихся в оперативной памяти.

micropython.stack_use()

Возвращает целое число, представляющее текущий объем стека, который используется. Абсолютное значение этого не особенно полезно, скорее его следует использовать для вычисления различий в использовании стека в разных точках.

micropython.heap_lock()

micropython.heap_unlock()

Блокировка или разблокировка кучи. Когда заблокирована, выделение памяти не может произойти, и при попытке выделения будет вызван MemoryError.

Эти функции могут быть вложенными, то есть heap_lock() может вызываться несколько раз подряд, и глубина блокировки будет увеличиваться, а затем heap_unlock() должен вызваться столько же раз, чтобы снова сделать кучу доступной.

micropython.kbd_intr(chr)

Устанавливает символ, который вызовет исключение KeyboardInterrupt. По умолчанию это значение равно 3 во время выполнения скрипта, что соответствует Ctrl-C. Передача -1 этой функции отключит захват Ctrl-C, а передача 3 восстановит его.

Эта функция может использоваться для предотвращения захвата Ctrl-C во входящем потоке символов, который обычно используется для REPL, в случае, если этот поток используется для других целей.

Select

Этот модуль предоставляет функции для ожидания событий в потоках (выберите потоки, которые готовы к работе).

Особенности Pyboard

Polling - это эффективный способ ожидания чтения/записи на нескольких объектах. Текущие объекты, поддерживающие опрос: pyb.UART, pyb.USB_VCP.

Методы

select.poll()

Создаёт экземпляр класса Poll.

select.select(rlist, wlist, xlist[, timeout])

Ждёт активности на множестве объектов.

Эта функция предназначена для совместимости и неэффективна. Вместо этого рекомендуется использовать Poll.

class Poll

Методы

poll.register(obj[, eventmask])

Регистрирует объект для опроса. Eventmask является логическим ИЛИ:

  • select.POLLIN - данные доступны для чтения
  • select.POLLOUT - можно записать больше данных
  • select.POLLERR - произошла ошибка
  • select.POLLHUP - обнаружены конец потока / прекращение соединения
  • eventmask по умолчанию select.POLLIN | select.POLLOUT.

poll.unregister(obj)

Отменяет регистрацию obj от опроса.

poll.modify(obj, eventmask)

Изменяет eventmask для obj.

poll.poll([timeout])

Ждёт, пока хотя бы один из зарегистрированных объектов станет готов. Возвращает список кортежей (obj, event,…), элемент события указывает, какие события произошли с потоком, и представляет собой комбинацию констант select.POLL *, описанных выше. В кортеже могут быть другие элементы, в зависимости от платформы и версии, поэтому не думайте, что его размер равен 2. В случае тайм-аута возвращается пустой список.

Тайм-аут в миллисекундах.

Sys

Методы

sys.exit(retval=0)

Завершает текущую программу с заданным кодом выхода. В основном, эту функцию вызывают как исключение SystemExit. Если указан аргумент, его значение передается в качестве аргумента SystemExit.

sys.print_exception(exc, file=sys.stdout)

Печатает исключение с обратной трассировкой в файлоподобный объектный файл (или sys.stdout по умолчанию).

Отличия от CPython

Это упрощенная версия функции, которая появляется в модуле трассировки в CPython. В отличие от traceback.print_exception(), эта функция принимает только значение исключения вместо типа исключения, значения исключения и объекта трассировки; аргумент файла должен быть позиционным; другие аргументы не поддерживаются. CPython-совместимый модуль трассировки можно найти в micropython-lib.

Константы

  • sys.argv: изменяемый список аргументов, с которыми была запущена текущая программа.
  • sys.byteorder: порядок байтов системы («маленький» или «большой»).
  • sys.implementation: объект с информацией о текущей реализации Python. Для MicroPython он имеет следующие атрибуты:
    • name  - строка «micropython»
    • version  - кортеж (major, minor, micro), например (1, 7, 0)

Этот объект является рекомендуемым способом отличить MicroPython от других реализаций Python (обратите внимание, что он все еще может не существовать в самых минимальных портах).

Отличия от CPython

CPython требует больше атрибутов для этого объекта, но фактический полезный минимум реализован в MicroPython.

sys.maxsize: максимальное значение, которое может содержать собственный целочисленный тип на текущей платформе, или максимальное значение, представляемое целочисленным типом MicroPython, если оно меньше максимального значения платформы (имеет место для портов MicroPython без поддержки длинных int).

Этот атрибут полезен для определения «битности» платформы (32-битная или 64-битная и т.д.). Рекомендуется не сравнивать этот атрибут с каким-либо значением напрямую, а считать количество бит в нем:

bits = 0

v = sys.maxsize

while v:

    bits += 1

    v >>= 1

if bits > 32:

    # 64-битная (или более) платформа

else:

    # 32-битная (или менее) платформа

    # Обратите внимание, что на 32-битной платформе значение битов может быть меньше 32

    # (например, 31) из-за особенностей, описанных выше, поэтому используйте «> 16»,

    # "> 32", "> 64" стиль сравнений.

  • sys.modules: словарь загруженных модулей. На некоторых портах он может не включать встроенные модули.
  • sys.path: изменяемый список каталогов для поиска импортированных модулей.
  • sys.platform: платформа, на которой работает MicroPython. Для портов OS / RTOS это, как правило, идентификатор ОС, например, линукс. Для биметаллических портов это идентификатор платы, например, pyboard для оригинальной платы MicroPython. Таким образом, его можно использовать для отличения одной платы от другой. Если вам нужно проверить, работает ли ваша программа на MicroPython (по сравнению с другой реализацией Python), используйте вместо этого sys.implementation.
  • sys.stderr: стандартный поток ошибок.
  • sys.stdin: стандартный поток ввода.
  • sys.stdout: стандартный поток вывода.
  • sys.version: версия языка Python, которой соответствует данная реализация, в виде строки.
  • sys.version_info: версия языка Python, которой соответствует данная реализация, как кортеж целых.

Ubinascii

Этот модуль реализует преобразования между двоичными данными и различными их кодировками в форме ASCII (в обоих направлениях).

Методы

ubinascii.hexlify(data[, sep])

Преобразует двоичные данные в шестнадцатеричное представление. Возвращает строку байтов.

Отличия от CPython

Если указан дополнительный аргумент sep, он используется в качестве разделителя между шестнадцатеричными значениями.

ubinascii.unhexlify(data)

Преобразует шестнадцатеричные данные в двоичное представление. Возвращает байтовую строку. (т. е. обратное для hexlify)

ubinascii.a2b_base64(data)

Преобразует данные в кодировке Base64 в двоичное представление. Возвращает байтовую строку.

ubinascii.b2a_base64(data)

Кодирует двоичные данные в формат Base64. Возвращает строку.

Ucrypto

Этот модуль обеспечивает встроенную поддержку криптографических алгоритмов, что свободно основано на PyCrypto.

Классы

class AES - улучшенный стандарт шифрования

Методы

crypto.getrandbits(bits)

Возвращает объект байтов, заполненный случайными битами, полученными от аппаратного генератора случайных чисел.

Согласно Техническому справочному руководству ESP32, такие биты «… могут использоваться в качестве основы для криптографических операций». «Эти истинные случайные числа генерируются на основе шума в радиочастотной системе Wi-Fi / BT. Когда Wi-Fi и BT отключены, генератор случайных чисел выдаст псевдослучайные числа ».

Биты параметра округляются в большую сторону до ближайшего кратного 32 битам.

Криптография - это не тривиально. Неправильное решение может привести к снижению или отсутствию безопасности. Пожалуйста, будьте внимательны, если используете шифрование для защиты важной информации.

crypto.generate_rsa_signature(message, private_key, *, pers=“esp32-tls”)

Генерирует подпись для message на основе private_key с использованием алгоритма RS256. Сообщение ожидается в виде строки. Private_key - это содержимое закрытого ключа, а не путь. Закрытый ключ должен быть в формате PKCS8! pers - строка персонализации, используемая для генерации случайных чисел. Возвращается с объектом Bytes, содержащим сгенерированную подпись.

import crypto

# Пример заголовка JWT + payload

header_payload = "eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ"

# Закрытый ключ ДОЛЖЕН БЫТЬ в формате PKCS8 !!!

f = open("cert/private_key_pkcs8.pem")

pk = f.read()

# Создать подпись

signature = crypto.generate_rsa_signature(header_payload, pk, pers="my_pers_string")

crypto.rsa_encrypt(message, public_key)

Зашифровывает message с помощью public_key получателя, поэтому оно будет расшифровано только реальным адресатом.

message является байтовым объектом.

Public_key - это RSA 2048bits, содержимое файла ключа (не путь к нему), и он должен быть в формате PKCS8. Ниже приведен пример того, как был сгенерирован этот ключ.

Возвращает объект Bytes, содержащий зашифрованное сообщение.

Пример использования находится в методе crypto.rsa_decrypt().

crypto.rsa_decrypt(message, private_key)

Расшифровывает сообщение с помощью private_key.

Сообщение является байтовым объектом.

Private_key - это RSA 2048bits, содержимое файла ключа (не путь к нему), и он должен быть в формате PKCS8. Ниже приведен пример того, как был сгенерирован этот ключ.

Возвращает объект Bytes, содержащий дешифрованное сообщение.

# создание пары открытых и закрытых ключей в одном файле PEM

$ openssl genrsa -des3 -out private.pem 2048

# экспортировать открытый ключ RSA в файл

$ openssl rsa -in private.pem -outform PEM -pubout -out public.pem

# экспортировать закрытый ключ RSA в файл

$ openssl rsa -in private.pem -out private_unencrypted.pem -outform PEM

 

# Пример сообщения

message = "this is a secret message, it needs to be encrypted"

 

# прочитать ключ из файла

f = open("cert/public.pem")

pk = f.read()

f.close()

 

# Зашифровать сообщение

message_encrypted = crypto.rsa_encrypt(payload, pk)

 

# рекомендуется добавлять контрольную сумму SHA (`uhashlib.sha ()`),

# поэтому, когда сообщение расшифровано, можно проверить согласованность

 

# ... далее отправить сообщение в сеть (LoRa, Wifi, BLE, сотовая связь)

 

# попробуйте расшифровать на ресивере

 

# прочитать ключ из файла

f = open("cert/private_unencrypted.pem")

pub = f.read()

f.close()

 

message_decrypted = crypto.rsa_decrypt(message_encrypted, pub)

# Кроме того, следует проверить согласованность (использование `uhashlib.sha ()` `)

# так как сообщение могло быть изменено (злоумышленник, проблемы с сетью)

Uctypes

Этот модуль реализует «интерфейс внешних данных» для MicroPython. Идея, лежащая в основе, похожа на модули CPython ctypes, но API отличается оптимизацией под небольшой размер. Основная идея модуля состоит в том, чтобы определить структуру данных и получить к ней доступ, используя точечный синтаксис для ссылки на подполя.

Модуль использует стандартный способ Python для доступа к структурам двоичных данных (плохо масштабируется для больших и сложных структур).

Определение структуры 

Структура определяется «дескриптором» - словарем Python, который кодирует имена полей в виде ключей, а также и другие свойства, необходимые для доступа к ним в качестве связанных значений. В настоящее время для uctypes требуется явное описание смещений для каждого поля. Смещение дается в байтах от начала структуры.

Ниже приведены примеры кодирования для различных типов полей:

  • Скалярные типы:

"field_name": uctypes.UINT32 | 0

Другими словами, значение - это идентификатор скалярного типа OR-ed со смещением поля (в байтах) от начала структуры.

  • Рекурсивные структуры:

"sub": (2, {

    "b0": uctypes.UINT8 | 0,

    "b1": uctypes.UINT8 | 1,

})

Значение - это двойной кортеж, первый элемент которого - смещение, а второй - словарь дескрипторов структуры (примечание: смещения в рекурсивном дескрипторе относятся к структуре, которую они определяют).

  • Массивы примитивных типов:

"arr": (uctypes.ARRAY | 0, uctypes.UINT8 | 2),

Значение представляет собой двойной кортеж, первый элемент которого является флагом ARRAY или смещением, а второй - скалярным типом элемента или числом элементов в массиве.

  • Массивы типа Агрегат:

"arr2": (uctypes.ARRAY | 0, 2, {"b": uctypes.UINT8 | 0}),

Значение является тройным кортежем, первый элемент которого является флагом ARRAY или смещением, второй - количество элементов в массиве, а третий - дескриптор типа элемента.

  • Указатель на примитивный тип:

"ptr": (uctypes.PTR | 0, uctypes.UINT8),

Значение представляет собой двойной кортеж, первым элементом которого является флаг PTR или смещение, а вторым - тип скалярного элемента.

  • Указатель на тип агрегата:

"ptr2": (uctypes.PTR | 0, {"b": uctypes.UINT8 | 0}),

Значение является двойным кортежем, первый элемент которого - флаг PTR OR-ed со смещением, второй - дескриптор указанного типа.

  • Битовые поля:

"bitf0": uctypes.BFUINT16 | 0 | 0 << uctypes.BF_POS | 8 << uctypes.BF_LEN,

value - тип скалярного значения, содержащего данное битовое поле (typenames аналогичны скалярным типам, но с префиксами «BF»), OR-ed со смещением для скалярного значения, содержащего битовое поле, и далее OR-ed со значениями для битового смещения и битовой длины поля в пределах скалярного значения, смещенного на позиции BF_POS и BF_LEN соответственно. Положение битового поля отсчитывается от младшего значащего бита и представляет собой номер самого правого бита поля (другими словами, это количество бит, на которое скаляр должен быть сдвинут вправо для увеличения битового поля).

В приведенном выше примере первое значение UINT16 будет извлечено со смещением 0 (это может иметь значение при доступе к аппаратным регистрам, где требуется конкретный размер доступа и выравнивание). Затем битовое поле, крайний правый бит которого является наименее значимым битом UINT16. Длина - 8 бит: фактически, появится доступ к младшему байту UINT16.

Обратите внимание, что операции битового поля не зависят от порядка байтов: в частности, в приведенном выше примере доступ к младшему байту UINT16 будет получен в любом случае. Но есть зависимость от нумерации младшего значащего бита 0. В некоторых случаях может использоваться различная нумерация в ABI, но uctypes всегда использует нормализованную нумерацию, описанную выше.

Содержание модуля

class uctypes.struct(addr, descriptor, layout_type=NATIVE)

Создание объекта «чужой структуры данных» на основе адреса структуры в памяти, дескриптора (закодированного в виде словаря) и типа макета (см.ниже).

uctypes.LITTLE_ENDIAN

Тип для структуры с прямым порядком байтов little-endian. Это означает, что каждое поле занимает ровно столько байтов, сколько определено в дескрипторе: то есть выравнивание равно 1.

uctypes.BIG_ENDIAN

Тип для структуры с прямым порядком байтов big-endian.

uctypes.NATIVE

Тип для собственной структуры - с порядком байтов данных и выравниванием в соответствии с ABI системы, в которой работает MicroPython.

uctypes.sizeof(struct)

Возвращает размер структуры данных в байтах. Аргумент может быть либо структурным классом, либо конкретным структурным объектом (или его совокупным полем).

uctypes.addressof(obj)

Возвращает обратный адрес объекта. Аргумент должен быть байтовым массивом, байтовым или другим объектом, поддерживающим буферный протокол (возвращается как раз адрес этого буфера).

uctypes.bytes_at(addr, size)

Захват памяти по заданному адресу и размеру в виде байтового объекта. Поскольку объект байтов является неизменным, память фактически дублируется и копируется в объект байтов, поэтому, если позднее изменяется содержимое памяти, созданный объект сохраняет исходное значение.

uctypes.bytearray_at(addr, size)

Захват памяти по заданному адресу и размеру в виде объекта bytearray. В отличие от функции bytes_at(), описанной выше, вы получите доступ к текущему значению по заданному адресу памяти.

Структурные дескрипторы и экземпляры объектов структуры

Имея словарь дескриптора структуры и его тип, вы можете создать экземпляр конкретной структуры по заданному адресу памяти, используя конструктор uctypes.struct(). Адрес памяти обычно поступает из следующих источников:

  • Предопределенный адрес: при доступе к аппаратным регистрам в системе с открытым исходным кодом. Можно найти эти адреса в таблице данных для конкретного MCU/SoC.
  • В качестве возвращаемого значения от вызова некоторой функции FFI (Интерфейс внешней функции).
  • Из uctypes.addressof(), когда вы хотите передать аргументы в функцию FFI или получить доступ к некоторым данным для ввода/вывода (например, данные, считанные из файла или сетевого сокета).

Структурные объекты

Объекты структуры позволяют получить доступ к отдельным полям с использованием стандартной точечной нотации: my_struct.substruct1.field1. Если поле имеет скалярный тип, его получение приведет к примитивному значению (целочисленное значение Python или число с плавающей запятой), соответствующему значению, содержащемуся в поле. Скалярное поле также может быть назначено.

Если поле является массивом, к его отдельным элементам можно получить доступ с помощью стандартного оператора индекса [] - как для чтения, так и для назначения.

Если поле является указателем, оно может быть разыменовано с использованием синтаксиса [0] (соответствует оператору C *, хотя [0] также работает в C). Индексация указателя поддерживается другими целочисленными значениями, кроме 0: с той же семантикой, что и в C.

Подвелём итог: доступ к полям структуры обычно использует синтаксис C, за исключением разыменования указателя, когда вам нужно использовать оператор [0] вместо *.

Ограничения

Доступ к нескалярным полям приводит к выделению промежуточных объектов для их представления. Это означает, что особое внимание следует уделить компоновке структуры, с которой придётся работать, когда выделение памяти отключено (например, от прерывания). Рекомендации:

  • Избегайте вложенных структур. Например, вместо mcu_registers.peripheral_a.register1, определите отдельные дескрипторы компоновки для каждого периферийного устройства, к которым нужно обращаться: peripheral_a.register1.
  • Избегайте других нескалярных данных, таких как массив. Например, вместо peripheral_a.register[0] используйте peripheral_a.register0.

Обратите внимание, что эти рекомендации приведут к снижению читабельности и краткости макетов, поэтому их следует использовать только в том случае, если ожидается необходимость доступа к полям структуры без выделения памяти (возможно даже определить 2 параллельных макета: один для обычного использования и один для использования, когда выделение памяти запрещено).

Uhashlib

Этот модуль реализует алгоритмы хеширования двоичных данных (MD5 и SHA поддерживаются). Из-за ограничений аппаратного обеспечения поддерживается только одна активная операция хеширования.

Конструкторы

class uhashlib.md5([data])

Создает объект хеширования MD5 и при необходимости добавляет в него данные.

class uhashlib.sha1([data])

Создает хеш-объект SHA-1 и при необходимости добавляет в него данные.

class uhashlib.sha224([data])

Создает хеш-объект SHA-224 и при необходимости добавляет в него данные.

class uhashlib.sha256([data])

Создает хеш-объект SHA-256 и при необходимости добавляет в него данные.

class uhashlib.sha384([data])

Создает хеш-объект SHA-384 и при необходимости добавляет в него данные.

class uhashlib.sha512([data])

Создает хеш-объект SHA-512 и при необходимости добавляет в него данные.

Методы

hash.update(data)

Добавляет больше двоичных данных в хеш.

hash.digest()

Возвращает хеш для всех данных, переданных через хеш, как объект байтов. После вызова этого метода данные больше не могут быть переданы в хэш.

hash.hexdigest()

Этот метод НЕ реализован. Используйте ubinascii.hexlify (hash.digest ()) для достижения аналогичного эффекта.

Ujson

Этот модуль позволяет конвертировать между объектами Python и форматом данных JSON.

Методы

ujson.dumps(obj)

 Возвращает obj, представленный как строка JSON.

ujson.loads(str)

Разбирает JSON str и возвращает объект. Вызывает ValueError, если строка сформирована неправильно.

ujson.load(fp)

Разбирает содержимое fp (.read () - поддерживает файловый объект, содержащий документ JSON). Вызывает ValueError, если содержимое сформировано неправильно.

Uos

Модуль uos содержит функции для доступа к файловой системе и функцию urandom.

Особенности порта

Файловая система имеет / в качестве корневого каталога, доступные в настоящее время физические диски следующие:

  • / flash - внутренняя файловая flash система 
  • / sd - SD-карта (если она существует)

Методы

uos.uname()

Возвращает информацию о системе, версии прошивки и версии интерпретатора MicroPython.

uos.chdir(path)

Меняет текущий каталог.

uos.getcwd()

Считывает текущий каталог.

uos.listdir([dir])

Без аргументов перечисляет текущий каталог. В противном случае перечисляет заданный каталог.

uos.mkdir(path)

Создаёт новый каталог.

uos.remove(path)

Удаляет файл.

uos.rmdir(path)

Удаляет каталог.

uos.rename(old_path, new_path)

Переименовывает файл.

uos.stat(path)

Получает статус файла или каталога.

Возвращаемое значение представляет собой кортеж со следующими 10 значениями по порядку:

  • st_mode: защитные биты
  • st_ino: номер индекса (не реализовано - возвращает 0)
  • st_dev: устройство (не реализовано - возвращает 0)
  • st_nlink: количество жестких ссылок (не реализовано - возвращает 0)
  • st_uid: идентификатор пользователя владельца (не реализовано - возвращает 0)
  • st_gid: идентификатор группы владельца (не реализовано - возвращает 0)
  • st_size: размер файла в байтах.
  • st_atime: время последнего доступа.
  • st_mtime: время последней модификации контента.
  • st_ctime: время последнего изменения метаданных.

uos.getfree(path)

Возвращает свободное место на диске, заданном path.

uos.sync()

Синхронизирует все файловые системы.

uos.urandom(n)

Возвращает объект байтов с n случайными байтами.

uos.unlink(path)

Псевдоним для метода remove ().

uos.mount (block_device, mount_point, *, readonly = False)

Монтирует блочное устройство (например, объект SD) в указанной точке монтирования. Пример:

os.mount(sd, ‘/sd‘)

uos.unmount(path)

Размонтирует ранее смонтированное блочное устройство по указанному пути.

uos.mkfs(block_device or path)

Форматирует указанный путь: должен быть либо /flash, либо /sd. Блочное устройство также может быть передано как объект SD перед монтированием.

uos.dupterm(stream_object)

Дублирует терминал (REPL) на переданный stream-like объект. Данный объект должен по крайней мере реализовать методы read() и write().

Константы

uos.sep: Символ разделения, используемый в path

URE

Этот модуль реализует операции с регулярными выражениями. Поддерживаемый синтаксис регулярных выражений является подмножеством re-модуля CPython (и фактически является подмножеством расширенных регулярных выражений POSIX).

Поддерживаемые операторы:

^

$

?

*

+

??

*?

+?

Подсчет повторений ({m, n}), более сложные утверждения, группы и т.д. не поддерживаются.

Методы

ure.compile(regex)

Компилирует регулярное выражение, возвращает регулярное выражение.

ure.match(regex, string)

Сопоставляет регулярное выражение со строкой. Совпадение всегда происходит из начальной позиции в строке.

ure.search(regex, string)

Поиск регулярных выражений в строке. В отличие от соответствия, будет искать строку для первой позиции, которая соответствует регулярному выражению (которое все еще может быть 0, если привязано).

ure.DEBUG

Значение флага, отображение отладочной информации о скомпилированном выражении.

Регулирование объектов

Скомпилированное регулярное выражение. Экземпляры этого класса создаются с помощью ure.compile().

regex.match(string)

regex.search(string)

regex.split(string, max_split=-1)

Сопоставление объектов

Сопоставление объектов, возвращаемые методами match() и search().

match.group([index])

Поддерживает только числовые группы.

Usocket

Этот модуль обеспечивает доступ к интерфейсу BSD-сокета. См. соответствующий модуль CPython для сравнения.

Формат адреса сокета

Функции ниже принимают сетевой адрес в формате (ipv4_address, port), где ipv4_address - это строка с числовым IPv4-адресом с точечной нотацией, например, 8.8.8.8, а порт - это целочисленный номер порта в диапазоне 1-65535. Обратите внимание, что доменные имена не принимаются как ipv4_address, они должны быть сначала обработаны с помощью socket.getaddrinfo ().

Методы

socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)

Создаёт новый сокет, используя заданное семейство адресов, тип сокета и номер протокола.

socket.getaddrinfo(host, port)

Переводит аргумент host/port в последовательность из кортежей, которые содержит все необходимые аргументы для создания сокета, подключенного к этой службе. Список из кортежей имеет следующую структуру:(family, type, proto, canonname, sockaddr). В следующем примере показано, как подключиться к данному URL:

s = socket.socket()

s.connect(socket.getaddrinfo(‘www.micropython.org‘, 80)[0][-1])

Исключения

socket.error, socket.timeout

Константы

  • Типы семейств: socket.AF_INET, socket.AF_LORA, socket.AF_SIGFOX
  • Типы сокетов: socket.SOCK_STREAM, socket.SOCK_DGRAM, socket.SOCK_RAW
  • Протоколы сокетов: socket.IPPROTO_UDP, socket.IPPROTO_TCP
  • Слои опций сокетов: socket.SOL_SOCKET, socket.SOL_LORA, socket.SOL_SIGFOX
  • Параметры IP-сокета: socket.SO_REUSEADDR
  • Параметры сокетов LoRa: socket.SO_CONFIRMED, socket.SO_DR
  • Параметры сокетов Sigfox: socket.SO_RX, socket.SO_TX_REPEAT, socket.SO_OOB, socket.SO_BIT

Класс Socket

Методы

socket.close()

Отмечает сокет закрытым. Как только это происходит, все будущие операции с объектом сокета завершаются неудачно. Закрытый конец больше не будет получать данные.

Сокеты автоматически закрываются при наполнении, но рекомендуется закрывать их явно или использовать оператор with.

socket.bind(address)

Привязывает сокет к адресу. Сокет не должен быть связан с другим адресом. Параметр address должен быть кортежем, содержащим IP-адрес и порт.

В случае сокетов LoRa параметр address - это просто целое число с номером порта, например: s.bind(1)

socket.listen([backlog])

Разрешает серверу принимать соединения. Если задано отставание, то оно должно быть не менее 0 (иначе будет равно 0). Отставание задаёт количество соединений, которые система примет до отказа последующим. Если отставание не задано, то выбирается значение по умолчанию.

socket.accept()

Принимает соединение. Сокет должен быть привязан к адресу и соединению. Возвращаемое значение - это пара (conn, address), где conn - это новый объект сокета, используемый для отправки и получения данных о соединении, а address - это адрес, связанный с сокетом на другом конце соединения.

socket.connect(address)

Подключение к удаленному разъему по адресу.

socket.send(bytes)

Отправляет данные в сокет. Сокет должен быть подключен к удаленному разъему.

socket.send(bytes)

Иначе: socket.send(bytes)

socket.recv(bufsize)

Получает данные из сокета. Возвращаемое значение является байтовым объектом, представляющим полученные данные. Максимальный объем данных, получаемых за один раз, определяется параметром bufsize.

socket.sendto(bytes, address)

Отправляет данные в сокет. Сокет не должен быть подключен к удаленному сокету, так как идёт указание адреса.

socket.recvfrom(bufsize)

Получает данные из сокета. Возвращаемое значение - пара (bytes, address), где bytes - это байтовый объект, представляющий полученные данные, а address - это адрес сокета, отправляющего данные.

socket.setsockopt(level, optname, value)

Устанавливает значение параметров сокета. Необходимые символические константы определены в модуле сокета (SO_* и т.д.). Значение может быть целочисленным или байтовым объектом, представляющим буфер.

socket.settimeout(value)

Устанавливает тайм-аут на блокировку операций сокета. Аргументом value может быть неотрицательное число с плавающей запятой, выражающее секунды, или None. Если задано ненулевое значение, последующие операции сокета вызовут timeout exception, если если период истек до завершения операции. Если задан ноль, сокет переводится в неблокирующий режим. Если значение не указано, сокет переводится в режим блокировки.

socket.setblocking(flag)

Установка режима блокировки или неблокирования сокета: если флаг равен false, сокет устанавливается в неблокирующий, иначе в режим блокировки.

Этот метод является сокращением для определенных вызовов settimeout():

sock.setblocking(True) is equivalent to sock.settimeout(None)

sock.setblocking(False) is equivalent to sock.settimeout(0.0)

socket.makefile(mode=‘rb’)

Возвращает объект файла, связанный с сокетом. Точный возвращаемый тип зависит от аргументов, переданных в makefile(). Формат ограничен только двоичными режимами (rb и wb). Аргументы CPython: encoding, errors и newline не поддерживаются.

Сокет должен быть в режиме блокировки: внутренний буфер объекта может оказаться в несовместимом состоянии в момент тайм-аута.

Отличия от CPython. Закрытие файлового объекта, возвращаемого makefile(), также закроет исходный сокет.

socket.read(size)

Чтение до размера байтов из сокета. Возвращает объект байтов. Если размер не указан, то действует аналогично socket.readall(), (см. ниже).

socket.readall()

Читает все данные, доступные из сокета, до EOF. Функция не вернется, пока сокет не будет закрыт.

socket.readinto(buf[, nbytes])

Читает байты в буфер. Если указано nbytes, то следует прочитать не более этого количества байтов. В противном случае читает не более len(buf) байтов.

Возвращаемое значение: количество байтов, прочитанных и сохраненных в буфере.

socket.readline()

Читает строку, заканчивающуюся символом новой строки.

Возвращаемое значение: прочитанная строка.

socket.write(buf)

Записывает буфер байтов в сокет.

Возвращаемое значение: количество записанных байтов.

socket.do_handshake()

Выполняет рукопожатие SSL на ранее используемом в ssl.wrap_socket(). Может использоваться, когда сокет не является блокирующим, а рукопожатие SSL не выполняется во время выполнения connect().

Пример:

from network import WLAN

import time

import socket

import ssl

import uselect as select

 

wlan = WLAN(mode=WLAN.STA)

wlan.connect(ssid=‘‘, auth=(WLAN.WPA2, ‘‘))

while not wlan.isconnected():

    time.sleep(1)

    print("Wifi .. Connecting")

 

print ("Wifi Connected")

 

a = socket.getaddrinfo(‘www.postman-echo.com‘, 443)[0][-1]

s= socket.socket()

s.setblocking(False)

s = ssl.wrap_socket(s)

try:

    s.connect(a)

except OSError as e:

    if str(e) == ‘119‘: # For non-Blocking sockets 119 is EINPROGRESS

        print("In Progress")

    else:

        raise e

poller = select.poll()

poller.register(s, select.POLLOUT | select.POLLIN)

while True:

    res = poller.poll(1000)

    if res:

        if res[0][1] & select.POLLOUT:

            print("Doing Handshake")

            s.do_handshake()

            print("Handshake Done")

            s.send(b"GET / HTTP/1.0 ")

            poller.modify(s,select.POLLIN)

            continue

        if res[0][1] & select.POLLIN:

            print(s.recv(4092))

            break

    break

socket.dnsserver(*, dnsIndex, ip_addr)

Если аргументы не переданы, эта функция возвращает настроенные DNS-серверы Primary (Index = 0) и резервную копию (Index = 1).

Пример:

>>> socket.dnsserver()

(‘10.0.0.1‘, ‘8.8.8.8‘)

Настройка DNS-серверов:

>>> socket.dnsserver(1, ‘0.0.0.0‘)

>>> socket.dnsserver()

(‘10.0.0.1‘, ‘0.0.0.0‘)

USSL

Этот модуль обеспечивает доступ к средствам шифрования и проверки подлинности Transport Layer Security (часто называемом «Secure Sockets Layer») для сетевых сокетов, как на стороне клиента, так и на стороне сервера.

Методы

ssl.wrap_socket(sock, keyfile=None, certfile=None, server_side=False, cert_reqs=CERT_NONE, ca_certs=None, timeout=10sec)

Принимает экземпляр sock для socket.socket и возвращает экземпляр ssl.SSLSocket подтипа socket.socket, который обращает базовый сокет в контекст SSL. Пример:

import socket

import ssl

s = socket.socket()

ss = ssl.wrap_socket(s)

ss.connect(socket.getaddrinfo(‘www.google.com‘, 443)[0][-1])

Сертификаты должны использоваться для проверки другой стороны соединения, а также для аутентификации себя на другом конце. Такие сертификаты должны храниться в виде файлов с использованием FTP-сервера и должны быть размещены по определенным путям с конкретными именами.

Например, чтобы подключиться к серверам blynk с помощью сертификатов, поместите файл ca.pem, расположенный в папке примеров blynk, в /flash/cert/. Затем запустите:

import socket

import ssl

s = socket.socket()

ss = ssl.wrap_socket(s, cert_reqs=ssl.CERT_REQUIRED, ca_certs=‘/flash/cert/ca.pem‘)

ss.connect(socket.getaddrinfo(‘cloud.blynk.cc‘, 8441)[0][-1])

Сокеты SSL наследуют все методы стандартных сокетов, см. модуль usocket.

timeout: укажите время ожидания в секундах для операции SSL-рукопожатия между клиентом и сервером (по умолчанию 10 секунд)

Исключения

ssl.SSLError

Константы

ssl.CERT_NONE, ssl.CERT_OPTIONAL, ssl.CERT_REQUIRED: Поддерживаемые значения в cert_reqs

Ustruct

Поддерживаемые префиксы size/byte: @, <,>,!.

Поддерживаемые коды форматов: b, B, h, H, i, I, l, L, q, Q, s, P, f, d (последние два в зависимости от поддержки формата с плавающей запятой).

Методы

ustruct.calcsize(fmt)

Возвращает количество байтов, необходимое для хранения заданного fmt.

ustruct.pack(fmt, v1, v2, …)

Распределяет значения v1, v2, ... в соответствии со строкой формата fmt. Возвращаемое значение является байтовым объектом, кодирующим значения.

ustruct.pack_into(fmt, buffer, offset, v1, v2, …)

Распределяет значения v1, v2, ... в соответствии со строкой формата fmt в буфер, начиная с offset. offset может быть отрицательным для отсчета от конца буфера.

ustruct.unpack(fmt, data)

Распаковывает data в соответствии со строкой формата fmt. Возвращаемое значение является кортежем распакованных значений.

ustruct.unpack_from(fmt, data, offset=0)

Распаковывает data, начиная с offset в соответствии со строкой формата fmt. offset может быть отрицательным для отсчета от конца буфера. Возвращаемое значение является кортежем распакованных значений. 

Utime

Модуль utime предоставляет функции для получения текущего времени и даты, измерения временных интервалов и задержек.

Time Epoch: порт Pycom ESP32 использует стандарт для систем POSIX: 1970-01-01 00:00:00 UTC.

Поддержание фактической календарной даты/времени

Для этого требуются часы реального времени (RTC). В системах с базовой ОС (включая некоторые RTOS) RTC может быть неявным. Установка и поддержание фактического календарного времени является обязанностью ОС/RTOS и выполняется вне MicroPython: последний просто использует OS API для запроса даты/времени. Однако на baremetal портах системное время зависит от объекта machine.RTC(). Текущее календарное время может быть установлено с помощью функции machine.RTC().datetime(tuple) и поддерживаться следующими способами:

  • Резервным аккумулятором (который может быть дополнительным компонентом для конкретной платы).
  • Использование сетевого протокола времени (требуется настройка порта/пользователя).
  • Устанавливка вручную пользователем при каждом включении (многие платы поддерживают время RTC при полной перезагрузке, но в некоторых случаях может потребоваться установить его снова).

Если фактическое календарное время не поддерживается с помощью системного/MicroPython RTC, то функции, приведенные ниже и требующие ссылки на текущее абсолютное время, могут работать не так, как ожидалось.

Методы

utime.gmtime([secs])

Преобразовывает время, выраженное в секундах с начала эпохи (см. выше), в кортеж, который содержит: (year, month, mday, hour, minute, second, weekday, yearday). Если секунды не указаны или отсутствуют, то используется текущее время из RTC.

  • year включает в себя век (например, 2014).
  • month 1-12
  • mday 1-31
  • hour 0-23
  • minute 0-59
  • second 0-59
  • weekday 0-6 для пн-вс
  • yearday 1-366

utime.localtime([secs])

Подобно gmtime(), но конвертируется в местное время. Если значение secs не указано или отсутствует, используется текущее время с RTC.

utime.mktime()

Это обратная функция местного времени. Этот аргумент представляет собой полный кортеж, который выражает местное время. Возвращает целое число, которое является количеством секунд с 1 января 2000 года.

utime.sleep(seconds)

Сон на указанное количество секунд. seconds может быть числом с плавающей точкой (если сон идёт в течение доли секунды). Обратите внимание, что другие порты MicroPython могут не принимать аргумент с плавающей точкой, для совместимости с ними используйте функции sleep_ms() и sleep_us().

utime.sleep_ms(ms)

Задержка на указанное количество миллисекунд, должна быть положительной или равной 0.

utime.sleep_us(us)

Задержка для данного числа микросекунд, должна быть положительной или 0

utime.ticks_ms()

Возвращает время безотказной работы в миллисекундах.

utime.ticks_us()

Так же, как ticks_ms выше, но в микросекундах.

utime.ticks_cpu()

То же, что ticks_us, но быстрее.

utime.ticks_diff(old, new)

Измеряет время между последовательными вызовами ticks_ms(), ticks_us() или ticks_cpu(). Значение, возвращаемое этими функциями, может быть изменено в любое время, поэтому непосредственное их вычитание не поддерживается. Вместо этого следует использовать ticks_diff(). «Старое» значение должно фактически предшествовать «новому» значению во времени, иначе результат не определен. Эту функцию не следует использовать для измерения сколь угодно длинных периодов времени (поскольку функции ticks_*() обычно имеют короткий период). Ожидаемый шаблон использования реализует опрос событий с тайм-аутом:

# Дождаться подтверждения вывода GPIO, но не более 500 мкс

start = time.ticks_us()

while pin.value() == 0:

    if time.ticks_diff(start, time.ticks_us()) > 500:

        raise TimeoutError

utime.time()

Возвращает количество секунд как целое число начиная с эпохи, предполагая, что установлен базовый RTC. Если RTC не установлен, то функция возвращает количество секунд с момента включения или сброса). Если вы хотите разработать переносимое приложение MicroPython, вам не следует полагаться на эту функцию, чтобы обеспечить точность выше двойной. Если вам нужна более высокая точность, используйте функции ticks_ms() и ticks_us(), если вам нужно календарное время, то лучше использовать localtime() без аргумента.

utime.timezone([secs])

Устанавливает или получает смещение часового пояса в секундах. Если значение secs не указано, возвращается текущее значение.

В MicroPython time.timezone работает противоположно Python. В Python для получения местного времени вы пишете local_time = utc - timezone, в то время как в MicroPython это local_time = utc + timezone.

_thread

Этот модуль предоставляет низкоуровневые примитивы для работы с несколькими потоками (иными словами - light-weight процессы и задачи). Несколько потоков управления совместно используют свое глобальное пространство данных. Для синхронизации предусмотрены простые блокировки (также называемые мьютексами или двоичными семафорами).

Когда возникает ошибка потока, появляется исключение RuntimeError.

Пример использования

import _thread

import time

 

def th_func(delay, id):

    while True:

        time.sleep(delay)

        print(‘Running thread %d‘ % id)

 

for i in range(2):

    _thread.start_new_thread(th_func, (i + 1, i))

Методы

_thread.start_new_thread(function, args[, kwargs])

Запускает новый поток и возвращает его идентификатор. Поток выполняет функцию с аргументами из списка (кортеж). Необязательный аргумент kwargs указывает словарь аргументов с ключевыми словами. Когда функция возвращается, поток завершается. Когда функция завершается с необработанным исключением, выводится трассировка стека, затем поток завершается (но другие потоки продолжают работать).

_thread.exit()

Запускает исключение SystemExit. В отсутствие исключений приводит к бесшумному завершению потока.

_thread.allocate_lock()

Возвращает новый объект блокировки. Методы блокировки описаны ниже. Изначально блокировка отсутствует.

_thread.get_ident()

Возвращает идентификатор текущего потока: это ненулевое целое число. Его значение не имеет прямого значения (предназначено для использования, к примеру, для индексации словаря данных, специфичных для потока). Идентификаторы потока могут быть переработаны при выходе и создании другого потока.

_thread.stack_size([size])

Возвращает размер стека потока (в байтах), использованный при создании новых потоков. Необязательный аргумент size указывает размер стека, который будет использоваться для впоследствии созданных потоков, и должен быть равен нулю или положительному целому значению не менее 4096 (4KiB). 4KiB в настоящее время является минимальным поддерживаемым значением размера стека, когда можно гарантировать достаточное пространство для самого интерпретатора.

Объекты

_thread.LockType

Тип объектов блокировки.

class Lock

Используется для синхронизации между потоками

Методы

Блокировка объектов имеет следующие методы:

lock.acquire(waitflag=1, timeout=-1)

Без какого-либо необязательного аргумента этот метод обеспечивает блокировку безоговорочно: при необходимости ожидая, пока она не будет освобождена другим потоком (только один поток за один раз может получить блокировку).

Если присутствует целочисленный аргумент waitflag, то действие зависит от его значения: если оно равно нулю, блокировка осуществляется только в том случае, если она может быть получена немедленно, без ожидания. А если оно не равна нулю, то блокировка осуществляется безоговорочно.

Если аргумент тайм-аута с плавающей точкой присутствует и является положительным, то он указывает максимальное время ожидания в секундах перед возвратом. Отрицательный аргумент тайм-аута указывает на неограниченное ожидание. Невозможно указать время ожидания, если waitflag равен нулю.

Возвращаемое значение - True, если блокировка получена успешно, и False, если нет.

lock.release()

Снимает блокировку. Блокировка должна быть осуществлена ранее, не обязательно тем же потоком.

lock.locked()

Возвращает статус блокировки: True, если она была получена каким-либо потоком, и False, если нет.

В дополнение к этим методам можно также использовать объекты блокировки с помощью оператора with, например:

import _thread

a_lock = _thread.allocate_lock()

with a_lock:

    print("a_lock is locked while this executes")

Информация представленная на данном информационном ресурсе преследует исключительно рекламные цели и не является договором-офертой !
© Все права защищены 2021г https://compacttool.ru