在后台python中运行GPIO进程

在后台python中运行GPIO进程,python,Python,我使用Raspberry Pi 3和DHT11(温度和湿度传感器)获取周围的值 在通过python模块访问传感器时,有时会出现2-5秒的暂停,直到数据发送回RPI(以及用于显示结果的GUI)。当仅将数据打印到终端而不考虑GUI更新时,也会发生此问题 此延迟导致整个GUI暂停 将获取数据测量中的此暂停视为系统限制,我想知道是否有可能在并行/后台运行此过程(更新临时变量)-它不会暂停整个GUI 以下功能访问传感器并检索数据: ht_data(): h0,t0 = Adafruit_DHT.r

我使用Raspberry Pi 3和DHT11(温度和湿度传感器)获取周围的值

在通过python模块访问传感器时,有时会出现2-5秒的暂停,直到数据发送回RPI(以及用于显示结果的GUI)。当仅将数据打印到终端而不考虑GUI更新时,也会发生此问题

此延迟导致整个GUI暂停

将获取数据测量中的此暂停视为系统限制,我想知道是否有可能在并行/后台运行此过程(更新临时变量)-它不会暂停整个GUI

以下功能访问传感器并检索数据:

ht_data():
    h0,t0 = Adafruit_DHT.read_retry (11,4) # DHT module to obtain T&H 
    temp_var.set("%d"%t)  ## update StringVar
    hum_var.set("%d%%"%h) ## update StringVar
root.after(500, ht_data)

可能有一个更简单的解决方案

如您所见,
read\u retry
只是在重试之间使用
time.sleep()
,从GUI的角度来看,这确实是不可取的

因此,尝试使用
read()
而不是
read\u retry()
,如果返回
(无,无)
,则不要更新值

因为文档表明您只能每两秒钟读取一次,所以我增加了超时时间以匹配它

只有在使用
read()
无效时,才应使用单独的进程(或线程)

ht_data():
    h0,t0 = Adafruit_DHT.read(11,4)
    if h0 and t0:
        temp_var.set("%d" % t0)  ## update StringVar
        hum_var.set("%d%%" % h0) ## update StringVar
    root.after(2000, ht_data)