首页 > 解决方案 > 计时器到期后的 api 重试尝试

问题描述

我正在使用 Python 通过 RESTful API 连接访问楼宇自动化系统,但我遇到了一个问题,我似乎没有收到温度传感器值的更新。似乎它在 90% 的时间里都有效,而且我觉得我需要在代码中进行某种重试尝试。没有抛出异常,似乎代码只是永远处于等待模式。下面的这种方法是我从传感器接收更新值的方式:

def getState(self):

    sensor = session.find_entity(filter_expr='dat2', single=True) 
    sensor.wait()
    sensor = sensor.result
    sensor = float(sensor.tags['curVal'])
    return sensor

我使用的包名为 pyhaystack,在操作数下的readthedocs中有一节介绍如何编写异步异常,除非我没有遇到任何异常,很抱歉这里也没有很多 API 智慧......

在下面的屏幕截图中,这是在代码整夜等待后键盘中断之后。我编写了 custom_env.py 文件,但下面的所有其他内容都是 pyhaystack 包的一部分。

在此处输入图像描述

for i in range我知道下面的代码不正确,因为如果它挂在 上,它永远不会到达sensor.wait(),但是是否可以创建某种计时器,如果在 30 秒内未收到响应,则重试...类似的东西:

def getState(self):

    sensor = session.find_entity(filter_expr='dat2', single=True) 
    sensor.wait()

    n=30
    for i in range(n)
        time.sleep(1)
        n-=1

        if n=0 and sensor.wait():#didnt work, retry
                sensor = session.find_entity(filter_expr='dat2', single=True) 
                sensor.wait()

        else:
            pass

    sensor = sensor.result
    sensor = float(sensor.tags['curVal'])
    return sensor

任何提示都有帮助!谢谢...

标签: pythonapi

解决方案


问题:...创建某种计时器,如果在 30 秒内未收到响应

根据文档,您可以使用wait.(timeout=30)


从文档:

pyhaystack.util.state.HaystackOperation.wait(): 
  • 这会阻塞当前线程,直到操作完成(或者如果指定了超时,则直到该秒数到期)。

wait(timeout=None)
  • 等待操作完成。这不应该在与执行操作的线程相同的线程中调用,因为这会死锁。

推荐阅读