首页 > 解决方案 > 需要帮助解决 Google App Engine 作业在开发中有效但在生产中无效的问题

问题描述

我已经在一个网站上工作了一年多,主要使用 Django 和 Python3。我和我的几个朋友构建了一个前端,用户在其中输入一些参数并提交,然后转到 GAE 运行作业并返回结果。

在我的本地开发环境中,一切正常。我有两个独立的开发环境。一个在 docker 容器中构建整个服务。这会在大约 11 秒内产生所需的结果。另一个环境在我的计算机上本地运行源文件并连接到托管在 Google Cloud 中的 Postgres 数据库。Python 应用程序在本地运行。它在本地运行大约需要 2 分钟,云和本地机器的 post/gets 之间有很多延迟。

一旦我执行 Gcloud 应用程序部署并尝试在生产中运行,它就永远不会完成。我在代码中内置了一些打印语句,我知道它到达了提交参数进入 Python 代码的部分。我在本地计算机上通过此命令进行监控:gcloud app logs read.

我怀疑由于我的本地计算机是一个野兽(具有 64 GB RAM 的 i7-7770 处理器),它运行整个过程没有问题。但是在 GAE 中,我认为它没有提供合适的机器来有效地完成这项工作(没有足够的计算,没有足够的 RAM)。这是我的猜测。

所以,我需要帮助来解决这个问题。我尝试更改我的 app.yaml 文件,以便将资源扩展到 16 GB 的内存,但它永远不会部署。我收到错误 13。

另一个注意事项,在尝试运行该作业 60 分钟后,网站崩溃并显示以下消息:

502 服务器错误 错误:服务器错误 服务器遇到临时错误,无法完成您的请求。请在 30 秒后重试。

标签: pythondjangogoogle-app-engine

解决方案


好的,以防万一将来有人遇到类似的问题……我的 Google App Engine 工作人员不断崩溃是因为在生产环境中使用了 Pandas 数据框。我不知道 Pandas 到底在做什么,但我不断收到内存错误,它会使网站崩溃……而且它似乎没有出现在一行代码中。也就是说,它随机发生在 Pandas Dataframe 操作中的某个地方。

我仍在使用 Pandas Dataframe 来读取 csv 文件。然后我用

data_I_care_about = dict(zip(df.col1, df.col2)) 
#or 
other_data = df.col3.values.tolist()

然后进城加工。作为说明,在我的本地机器上(基本上是我的开发环境) - 从开始到结束运行需要 6 秒。Web 请求需要很长时间,但我很着急,这就是为什么我开始使用 Pandas 的原因。

重构之后,使用 python 列表和 dicts 大约在 200 毫秒内完成了相同的工作(同样,在我的开发环境中)。该网站现已启动并运行得非常顺利。点击“提交”后,最多需要7秒的时间,后端才能返回数据集并呈现在网页上。感谢各位大佬的帮助!


推荐阅读