问题标签 [google-app-engine-python]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
192 浏览

google-app-engine - Google App Engine 配额

我计划在我的应用程序中使用 Google Cloud Pub/Sub。当我在 Google App Engine 项目中启用 Pub/Sub Api 时,它显示每个用户有 10,000 个发布者操作和 20,000 个订阅者操作​​。我没有为我的应用使用 Google 登录。那么,这些配额将如何判断呢?

除此之外,我的 Google Cloud DataStore Api 向我展示了每天 1 亿个请求的免费配额。根据文档,我只能在免费应用程序中执行 50,000 次写入操作、50,000 次读取操作和 50,000 次小型操作。如何理解两者?

0 投票
2 回答
830 浏览

google-app-engine - 是否可以通过 url 将文件上传到应用引擎上的云存储而不写入磁盘?

要将文件从 url 上传到云存储系统,通常需要将该文件下载到服务器上,然后将其上传到云存储。

对于大文件,可能需要将文件写入磁盘而不是内存。由于应用引擎不支持在磁盘上写入,是否还有其他选项可以在应用引擎上执行此操作?

我知道托管虚拟机是一种选择,但我试图确保在经典应用引擎上绝对不可能做到这一点。

0 投票
3 回答
1700 浏览

python - 应用引擎(python)如何跨请求管理内存(超出软私有内存限制)

Exceeded soft private memory limit在应用引擎中的各种请求处理程序中偶尔遇到错误。我了解此错误意味着实例使用的 RAM 已超过分配的数量,以及这如何导致实例关闭。

我想了解错误的可能原因,首先,我想了解应用引擎 python 实例如何管理内存。我的基本假设是:

  1. F2 实例以 256 MB 开始
  2. 当它启动时,它会加载我的应用程序代码 - 比如说 30 MB
  3. 当它处理一个请求时,它有 226 MB 可用
    • 只要该请求不超过 226 MB(+ 误差范围),该请求就可以完成而没有错误
    • 如果确实超过 226 MB + 边距,则实例完成请求,记录“超出软私有内存限制”错误,然后终止 - 现在返回步骤 1
  4. 当该请求返回时,它使用的任何内存都会被释放 - 即。未使用的 RAM 回到 226 MB
  5. 无限期地对传递给实例的每个请求重复步骤 3-4

这就是我认为它会起作用的方式,但考虑到我偶尔会在相当广泛的请求处理程序中看到这个错误,我现在不太确定。我的问题是:

a) 步骤#4 发生了吗?

b) 什么可能导致它不发生?还是不完全发生?例如,请求之间的内存泄漏如何?

c) 存储在模块级变量中会导致内存使用泄漏吗?(我不是故意以这种方式使用模块级变量)

d) 我可以使用哪些工具/技术来获取更多数据?例如,在请求处理程序入口处测量内存使用情况?

在答案/评论中,请尽可能链接到 gae 文档。

[编辑] 额外信息:我的应用程序配置为threadsafe: false. 如果这对答案有影响,请说明它是什么。我打算threadsafe: true很快换。

[编辑]澄清:这个问题是关于 gae 对内存管理的预期行为。因此,虽然像“呼叫gc.collect()”这样的建议很可能是相关问题的部分解决方案,但它们并没有完全回答这个问题。直到我了解 gae 的行为方式之前,使用gc.collect()对我来说就像是巫毒编程。

最后:如果我把这一切都搞砸了,那么我提前道歉——我真的找不到太多有用的信息,所以我主要是在猜测..

0 投票
0 回答
112 浏览

python - 如何在谷歌应用引擎数据存储中存储套接字对象(我可以腌制一个套接字对象)

我需要将 Socket 对象存储到基于 GAE Python 的应用程序中的数据存储区/内存缓存中。

我采用的方法是 1. 使用 pickle.dumps 将套接字对象转换为字符串 2. 需要时检索此字符串并使用 unpicklepickle.loads(<pickledSock>)

完整的错误信息如下,但主要部分是:

这是否意味着我不能使用上述方法,因为“unpickling”不起作用?

0 投票
1 回答
671 浏览

python - Google App Engine Python:重定向到同一页面以重新加载表

我有一个 html 页面,您可以在其中在表单中输入信息,当您单击提交按钮时,它会重定向页面并使用新信息更新表格。我使用了“self.redirect('/')”,它确实重新加载了所有内容,但没有更新表格,除非我手动刷新页面。下面是我的代码:

我在这里做错了吗?

0 投票
1 回答
284 浏览

google-app-engine - ndb.toplevel 和 ndb.transactional 的交互

有没有可能@ndb.toplevel玩得很好@ndb.transactional

我想要实现的是一个包含entity.put_async()调用的事务,但方便的是不必显式等待期货。@ndb.toplevel通常会这样做,但另一个 SO 问题似乎表明它不能与事务结合使用:“ndb 顶级中断事务吗?”

我在 App Engine 文档的任何地方都找不到明确记录的内容。我们可以重现该问题中显示的断言错误,但我们编写了一些测试来查看put_async()调用是否失败并且没有发现任何问题。但是,由于可能会丢失数据,因此很高兴在这里从熟悉 ndb 的人那里获得更具体的答案。

我们的简单测试代码如下。如果我们同时删除 thendb.toplevelndb.transactional装饰器,测试将失败,正如预期的那样。但是,如果我们只使用ndb.transactional装饰器而忽略ndb.toplevel装饰器,则测试通过,这是意料之中的。这让我担心,也许ndb.transactional调用put_async()有足够的时间来完成,但没有任何保证,所以它可能会意外失败?

0 投票
1 回答
85 浏览

google-app-engine - 选择性触发模型_post_put_hook

我在更新一些搜索索引的 ndb 模型上设置了一个 _post_put_hook。这简化了数据导入和原子更新。但是我有一种情况,我想在不触发索引操作的情况下更新该模型的某些属性。

所以我正在寻找:

  1. 可以与 _post_put_hook 一起使用的某种标志,或者:
  2. 一种了解该 put() 上哪些模型属性/值已更改的方法,因此我可以添加条件来更新索引或不更新索引。

谢谢!

0 投票
0 回答
103 浏览

python - 模块在 django 框架的 gae 中不起作用

我正在使用带有 django 框架的谷歌应用引擎。

我有两个模块:default 和 helloworld

app.yaml 如下:

我希望所有的myapp.appspot.com/helloworld/*都被路由到 helloworld 模块。

dispatch.yaml 如下:

这是helloworld.yaml:

但是,当传入的 url 为myapp.appspot.com/helloworld/*时,页面将被重定向到登录页面。并且日志显示/_ah/start404。

我在Appengine 模块中看到了类似的问题:Routing with dispatch.yaml not working which modifyed wsgi config with webapp2 framework。

这是我的 wsgi.py

我使用appcfg update app.yaml helloworld.yamlappcfg update_dispatch .上传这些设置。

如何使用 django 框架正确导入这个 helloworld 模块?

谢谢你。

0 投票
1 回答
117 浏览

python - Python Google App Engine 的文件上传示例?

我尝试了 Google 的 Python blobstore 示例代码,但它只是重定向到 /_ah/upload/ 处的空白页面,该页面不显示上传的文件。是否还有其他需要使用此代码运行的东西,或者有人有一个工作示例?我尝试了开发服务器和完整部署。

0 投票
1 回答
688 浏览

django - gcloud更新后使用Django模块部署Google App Engine?

我们正在使用 Django 1.7 部署到 GAE(我们将它作为我们的符号链接模块发送virtualenv)。gcloud在工具的最新更新之前一切都很好。

现在当我们执行时,$ gcloud preview app deploy app.yaml我们得到:

我们猜测这与我们上传自己的 Django 版本有关,但我们不知道如何解决这个问题。我们曾尝试使用具有旧版本gcloud工具的计算机,但我们收到了Too many files (limit is 10,000)错误消息。

有关如何使用最新解决此问题的任何提示gcloud?谢谢!