python - 计时器到期后的 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
任何提示都有帮助!谢谢...
解决方案
问题:...创建某种计时器,如果在 30 秒内未收到响应
根据文档,您可以使用wait.(timeout=30)
从文档:
pyhaystack.util.state.HaystackOperation.wait():
- 这会阻塞当前线程,直到操作完成(或者如果指定了超时,则直到该秒数到期)。
wait(timeout=None)
- 等待操作完成。这不应该在与执行操作的线程相同的线程中调用,因为这会死锁。
推荐阅读
- exchange-server - 为什么限制被忽略?
- swift - 获取 Codable(或 Decodable)中的所有键
- docker - docker 图像的新文件在 GCP 中保存到哪里?
- c++ - 使用向量和冒泡排序的动态内存分配
- angular - 有没有一种简单的方法来隐藏由数组组成的多个元素
- c++ - 将文件从 FTP 服务器转换为客户端的字节数组
- r - 文本清理:删除错误字符
- javascript - 如何使用 Ramda 按值进行无点数组搜索
- python - 仅在关闭 tkinter 窗口后运行的功能
- swift - 反映类型时,Swift Mirror Children 集合为空