运行 Python 3.11 的 Google App Engine 网站大约每小时间歇性崩溃,并出现无法访问本地变量错误

问题描述 投票:0回答:1

将我的 Google Apps Engine 网站从 Python 2.7 转换为 Python 3.11 后,该网站大约每小时崩溃一次。错误信息是局部变量未定义。此错误不可重复。当我运行相同的查询时,我没有收到错误。

日志中的完整错误消息是: UnboundLocalError:无法访问未与值关联的局部变量“Pelevation”

在我的程序中,我看不出该变量如何未定义。我在程序定义变量的位置添加了一个检查,以确保它已被定义。间歇性错误仍然发生。然后我添加了对未定义变量的检查,然后将其重置回正确的值。将变量设置回正确值后,程序中访问的下一个变量是未定义的。我的印象是程序中的所有变量都变成了未定义。

这些症状与空闲内存管理中的问题一致,我的程序无法访问该问题。我已经更新到最新版本的 Flask 和我使用的其他支持包。这并没有改变这种间歇性错误的频率。

我大概花了一周的时间寻找可能是我做的事情导致了这个问题。该问题存在于具有相似代码的三个不同网站中。我被困住了。

python google-app-engine python-3.11
1个回答
0
投票

如果您假设(您的代码是以这种方式编写的)变量的值是有状态的,则可能会发生这种情况。

a) 您在请求期间初始化变量

b) 您直接从后续请求中读取变量的值

示例场景

  1. 您的申请开始

  2. 向您的端点之一发出请求,并且您为变量设置一个值

  3. 更多请求进入同一端点或另一个端点,您的代码会读取变量的值。

  4. 收到更多请求,这一次,GAE 启动应用程序的新实例

    a)因为它是一个新实例,所以该变量未定义、初始化或设置

    b) 因此,当请求路由到尝试读取变量值的端点时,会引发错误。

对于此示例场景,一种可能的解决方案是将值存储在某处,例如memcache 并尝试从那里读取(已经运行的应用程序的新实例将有权访问存储在 memcache 中的数据)

© www.soinside.com 2019 - 2024. All rights reserved.