我发现,就像我之前的许多人一样,AppEngine有60秒的执行截止日期。
Process terminated because the request deadline was exceeded.
我的用例与我见过的其他用例有点不同。我有一个网页表单,可以让你移动一个切换开关;有一个页面,你可以GET表示这个切换状态为1或0.一个Raspberry Pi每10秒点击一次这个页面,并使我的前门灯光与切换的状态相匹配。我正在通过HTTP进行所有这些操作(Pi在4G调制解调器上,防火墙在其他端口上流量)。
我今天早些时候想到了“有状态改变”的处理程序。 Pi会在第一次启动时获得并匹配状态,但之后它会遇到一个(通常非常慢的加载)处理程序,它执行类似这样的操作:
iterations = 0
current_state = get_state()
while iterations < 600
if get_state != current_state:
return "Change!"
iterations = iterations + 1
time.sleep(1)
return "No change"
这会每隔十分钟将我的4G开销减少到一个请求,但是 - 如果状态发生变化 - 页面会立即完成加载,我可以立即采取行动。如果没有任何改变,我会再次调用该过程 - 但现在我每10分钟一次,而不是每10秒钟一次。
即使有50s的上限,我也可以构建它,这将节省一些开销+改善我的响应延迟。但是,我是否缺少关于截止日期如何工作的事情,这会让我在GAE中做更长时间的事情?