问题标签 [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.
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 次小型操作。如何理解两者?
google-app-engine - 是否可以通过 url 将文件上传到应用引擎上的云存储而不写入磁盘?
要将文件从 url 上传到云存储系统,通常需要将该文件下载到服务器上,然后将其上传到云存储。
对于大文件,可能需要将文件写入磁盘而不是内存。由于应用引擎不支持在磁盘上写入,是否还有其他选项可以在应用引擎上执行此操作?
我知道托管虚拟机是一种选择,但我试图确保在经典应用引擎上绝对不可能做到这一点。
python - 应用引擎(python)如何跨请求管理内存(超出软私有内存限制)
我Exceeded soft private memory limit
在应用引擎中的各种请求处理程序中偶尔遇到错误。我了解此错误意味着实例使用的 RAM 已超过分配的数量,以及这如何导致实例关闭。
我想了解错误的可能原因,首先,我想了解应用引擎 python 实例如何管理内存。我的基本假设是:
- F2 实例以 256 MB 开始
- 当它启动时,它会加载我的应用程序代码 - 比如说 30 MB
- 当它处理一个请求时,它有 226 MB 可用
- 只要该请求不超过 226 MB(+ 误差范围),该请求就可以完成而没有错误
- 如果确实超过 226 MB + 边距,则实例完成请求,记录“超出软私有内存限制”错误,然后终止 - 现在返回步骤 1
- 当该请求返回时,它使用的任何内存都会被释放 - 即。未使用的 RAM 回到 226 MB
- 无限期地对传递给实例的每个请求重复步骤 3-4
这就是我认为它会起作用的方式,但考虑到我偶尔会在相当广泛的请求处理程序中看到这个错误,我现在不太确定。我的问题是:
a) 步骤#4 发生了吗?
b) 什么可能导致它不发生?还是不完全发生?例如,请求之间的内存泄漏如何?
c) 存储在模块级变量中会导致内存使用泄漏吗?(我不是故意以这种方式使用模块级变量)
d) 我可以使用哪些工具/技术来获取更多数据?例如,在请求处理程序入口处测量内存使用情况?
在答案/评论中,请尽可能链接到 gae 文档。
[编辑] 额外信息:我的应用程序配置为threadsafe: false
. 如果这对答案有影响,请说明它是什么。我打算threadsafe: true
很快换。
[编辑]澄清:这个问题是关于 gae 对内存管理的预期行为。因此,虽然像“呼叫gc.collect()
”这样的建议很可能是相关问题的部分解决方案,但它们并没有完全回答这个问题。直到我了解 gae 的行为方式之前,使用gc.collect()
对我来说就像是巫毒编程。
最后:如果我把这一切都搞砸了,那么我提前道歉——我真的找不到太多有用的信息,所以我主要是在猜测..
python - 如何在谷歌应用引擎数据存储中存储套接字对象(我可以腌制一个套接字对象)
我需要将 Socket 对象存储到基于 GAE Python 的应用程序中的数据存储区/内存缓存中。
我采用的方法是 1. 使用 pickle.dumps 将套接字对象转换为字符串 2. 需要时检索此字符串并使用 unpicklepickle.loads(<pickledSock>)
完整的错误信息如下,但主要部分是:
这是否意味着我不能使用上述方法,因为“unpickling”不起作用?
python - Google App Engine Python:重定向到同一页面以重新加载表
我有一个 html 页面,您可以在其中在表单中输入信息,当您单击提交按钮时,它会重定向页面并使用新信息更新表格。我使用了“self.redirect('/')”,它确实重新加载了所有内容,但没有更新表格,除非我手动刷新页面。下面是我的代码:
我在这里做错了吗?
google-app-engine - ndb.toplevel 和 ndb.transactional 的交互
有没有可能@ndb.toplevel
玩得很好@ndb.transactional
?
我想要实现的是一个包含entity.put_async()
调用的事务,但方便的是不必显式等待期货。@ndb.toplevel
通常会这样做,但另一个 SO 问题似乎表明它不能与事务结合使用:“ndb 顶级中断事务吗?”
我在 App Engine 文档的任何地方都找不到明确记录的内容。我们可以重现该问题中显示的断言错误,但我们编写了一些测试来查看put_async()
调用是否失败并且没有发现任何问题。但是,由于可能会丢失数据,因此很高兴在这里从熟悉 ndb 的人那里获得更具体的答案。
我们的简单测试代码如下。如果我们同时删除 thendb.toplevel
和ndb.transactional
装饰器,测试将失败,正如预期的那样。但是,如果我们只使用ndb.transactional
装饰器而忽略ndb.toplevel
装饰器,则测试通过,这是意料之中的。这让我担心,也许ndb.transactional
调用put_async()
有足够的时间来完成,但没有任何保证,所以它可能会意外失败?
google-app-engine - 选择性触发模型_post_put_hook
我在更新一些搜索索引的 ndb 模型上设置了一个 _post_put_hook。这简化了数据导入和原子更新。但是我有一种情况,我想在不触发索引操作的情况下更新该模型的某些属性。
所以我正在寻找:
- 可以与 _post_put_hook 一起使用的某种标志,或者:
- 一种了解该 put() 上哪些模型属性/值已更改的方法,因此我可以添加条件来更新索引或不更新索引。
谢谢!
python - 模块在 django 框架的 gae 中不起作用
我正在使用带有 django 框架的谷歌应用引擎。
我有两个模块:default 和 helloworld
app.yaml 如下:
我希望所有的myapp.appspot.com/helloworld/*
都被路由到 helloworld 模块。
dispatch.yaml 如下:
这是helloworld.yaml:
但是,当传入的 url 为myapp.appspot.com/helloworld/*
时,页面将被重定向到登录页面。并且日志显示/_ah/start
404。
我在Appengine 模块中看到了类似的问题:Routing with dispatch.yaml not working which modifyed wsgi config with webapp2 framework。
这是我的 wsgi.py
我使用appcfg update app.yaml helloworld.yaml
和appcfg update_dispatch .
上传这些设置。
如何使用 django 框架正确导入这个 helloworld 模块?
谢谢你。
python - Python Google App Engine 的文件上传示例?
我尝试了 Google 的 Python blobstore 示例代码,但它只是重定向到 /_ah/upload/ 处的空白页面,该页面不显示上传的文件。是否还有其他需要使用此代码运行的东西,或者有人有一个工作示例?我尝试了开发服务器和完整部署。
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
?谢谢!