我知道终止通知是通过元数据网址提供,我也可以为了确定做同样的事情到EC2现货实例终止与Python 2.7版
if requests.get("http://169.254.169.254/latest/meta-data/spot/termination-time").status_code == 200
如果该通知已经公布。我在我的现货实例中运行Python服务是:
- 遍历长轮询SQS队列
- 如果得到消息,它将暂停投票和作品的有效载荷。
- 处理有效负载可能需要5-50分钟。
- 处理有效负载将涉及产生最多50个线程的线程池以处理将文件并行上传到S3,这是处理有效负载所花费的大部分时间。
- 最后,从队列中删除消息,漂洗,重复。
这项工作是幂等的,所以如果相同的有效负载运行多次,我就不用处理时间/成本,但不会对应用程序工作流程产生负面影响。
我正在寻找一种优雅的方式,现在也在后台每隔5秒轮询终止通知。一旦出现终止通知,我想立即将消息释放回SQS队列,以便另一个实例尽快提取它。
作为奖励,我想关闭工作,关闭线程池并让服务进入停滞状态。如果我终止服务,supervisord将简单地重新启动它。
更大的奖金!有没有可用的Python模块简化了这一点,只是工作?