我正在使用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软件包的一部分。
我知道下面的代码是不正确的,因为如果挂在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
任何提示都可以帮助!谢谢...
答案 0 :(得分:0)
问题:...创建某种计时器,以便在30秒内未收到响应的情况下
根据文档,您可以使用wait.(timeout=30)
从文档中:
pyhaystack.util.state.HaystackOperation.wait():
- 这将阻塞当前线程,直到操作完成(或如果指定了超时,直到该秒数到期)为止。
wait(timeout=None)
- 等待操作完成。不应在与执行操作的线程相同的线程中调用此方法,否则会导致死锁。