Почему чтение из / sys / bus / ... занимает так много времени? - PullRequest
0 голосов
/ 09 мая 2019

Я работаю над проектом, который требует данные датчика от датчика температуры. Получив доступ к файлу с помощью open () и затем read (), мы обнаружили, что это заняло слишком много времени. У нас есть изолированная проблема для чтения (), занимающая больше всего времени (приблизительно 1 секунда). Есть ли более быстрая альтернатива read () или я использую ее неправильно? Код:

import time, os, socket

#External thermometer address: 28-031897792ede

os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

temp_sensor = '/sys/bus/w1/devices/28-031897792ede/w1_slave'

def temp_raw():
    f = open(temp_sensor, 'r')
    lines = f.readlines()
    f.close()
    return lines

def read_temp():

    lines = temp_raw()
    while lines[0].strip()[-3:] != 'YES':
        lines = temp_raw()

    temp_output = lines[1].find('t=')

    if temp_output != -1:
        temp_string = lines [1].strip()[temp_output+2:]
        temp_c = float(temp_string) / 1000.0
        return round(temp_c, 1)

while True:
    temp_raw()

1 Ответ

1 голос
/ 09 мая 2019

Вы открываете файл, который на самом деле не является обычным файлом файловой системы - это символьное устройство. Узлы устройства в Linux имеют свои системные вызовы, напрямую реализуемые конкретным драйвером, который регистрируется для обработки пары старший / младший номер, и поэтому их производительность зависит от реализации этого драйвера в операционной системе.

Высокая задержка характерна для драйвера w1-therm; это происходит независимо от того, какой язык программирования вы используете.

В соответствии с техническими данными для оборудования, при https://www.maximintegrated.com/en/products/sensors/DS18B20.html, частота обновления составляет ~ 750 мс при генерации 12-битных выходов. Таким образом, вы просматриваете примерно 3/4 секунды на показание температуры, даже если все остальное абсолютно идеально.

Честно говоря, более быстрая частота обновления не имеет смысла в контексте датчика температуры - если физическая температура самого устройства изменяется так быстро, что вам нужно больше, чем измерение каждую секунду (принимая во внимание время необходимо, чтобы тепло действительно передавалось к датчику), у вас есть большие проблемы.

...