计时器到期后api重试尝试

时间:2018-12-17 19:00:05

标签: python api

我正在使用Python通过宁静的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软件包的一部分。

enter image description here

我知道下面的代码是不正确的,因为如果挂在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

任何提示都可以帮助!谢谢...

1 个答案:

答案 0 :(得分:0)

  

问题:...创建某种计时器,以便在30秒内未收到响应的情况下

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


  

从文档中:

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

wait(timeout=None)
     
      
  • 等待操作完成。不应在与执行操作的线程相同的线程中调用此方法,否则会导致死锁。
  •