Python - 等待远程系统启动的最佳方式

时间:2016-02-21 13:04:12

标签: python python-requests wait

我正在使用wake on lan在python脚本中启动某个服务器。

当我可以成功执行API请求时,服务器处于联机状态,例如:

return requests.get(
        url + path,
        auth=('user', user_password),
        headers={'Content-Type':'application/json'},
        verify=False,
        timeout=0.05
    ).json()

等待服务器启动过程(直到可通过API访问)的最佳方法是什么,而不会在循环中向请求网络发送垃圾邮件?

2 个答案:

答案 0 :(得分:0)

我相信你非常接近。为什么不将该请求放在document.addwhile块中?

try except

答案 1 :(得分:0)

您的两个选择是轮询远程服务,直到它响应或配置服务以某种方式通知您它已启动。

在循环中发送请求真的没有错,只要你不经常不必要地这样做。如果服务需要大约10秒钟,那么每秒检查一次是合理的。如果需要大约10分钟,那么每30秒左右可能会没问题。

替代方案 - 某种推送通知 - 更优雅,但它要求您已经启动并运行其他服务,并收听通知。例如,您可以在重新启动远程服务之前在本地启动一个简单的Web服务器,并让远程服务在准备开始处理请求时对您的服务器发出请求。

一般来说,我会从轮询方法开始,因为它更容易,并且涉及更少的移动部件。确保以容错的方式设计轮询;尤其要确保在放弃之前指定最长等待时间或轮询尝试次数。否则,如果远程服务永远不会出现,您的脚本将会挂起。