我已经在Google应用引擎上部署了Flask应用程序,从而将各种端点暴露给外部世界。有一些全局变量,包括一个列表。在将信息添加到全局变量几小时后,它被重置为空变量,并且根据端点的请求,响应为空。请帮我解决这个问题。谢谢
答案 0 :(得分:1)
确切的行为可能会因您的缩放比例选择而异,但是基本上,如果需要服务更多请求,则App Engine服务可能会生成新实例,或者在不再需要时关闭实例。
假设您有一个实例,该实例的全局变量正在更新中。如果需要一个新实例,App Engine将从头开始生成一个全新实例,并将全局变量设置为默认值。最重要的是,来自客户端的一个请求可能会到达第一个实例,但是来自同一客户端的下一个请求可能会到达第二个实例,这导致行为不一致,因为您的全局变量可能(很可能)在两个实例上都没有相同的值。
通常,应避免在分布式系统上使用全局变量。我建议使用Datastore之类的持久性存储选项来存储您的列表,以便所有App Engine实例都将查询该存储以获取最新的公共列表。如果延迟对您的应用至关重要,则您可能还希望将该值缓存到Memcache以便更快地进行检索。