【问题标题】:App Engine: CPU Over Quota on urlfetch()App Engine:urlfetch() 上的 CPU 超出配额
【发布时间】:2010-11-23 14:05:22
【问题描述】:

嘿。我对 App Engine 很陌生。我创建了一个基于 Web 的 Twitter 应用程序,该应用程序现在在 App Engine 上运行,并且我的 CPU 经常超出配额限制。我做了一些分析,发现每个请求都包含两个 urlfetch 查询,每个查询最多需要 2 个 CPU 秒。这段时间可能是在等待,所有其余的代码都在 200 毫秒内完成(包括使用 Datastore)。配额是每天 6.5 小时,我的每个请求大约需要 6.5 小时。 4 CPU 秒。今天早上我在几个小时内就用完了免费配额。

解决这个问题的方法是什么?我无法让 Twitter 更快地响应我的 API 调用,也无法缓存结果,因为每个请求都针对不同的 Twitter 个人资料。

任何帮助表示赞赏, 谢谢!

【问题讨论】:

标签: python google-app-engine


【解决方案1】:

考虑到没有花费 CPU 时间,我会感到困惑的是,在 urlfetch 中等待远程响应所花费的时间被计入您的 CPU 配额。

但假设这确实是问题所在,asynchronous requests 可能是您的解决方案。至少,您可以重叠两个 urlfetch 请求以同时进行。也许你会找到其他可以做的事情,直到回复回来。

【讨论】:

  • 感谢您的回复!问题在于,对 Twitter API 的两个请求是单独的 HTTP 请求,如果在第一个请求完成后立即在 AJAX 调用期间触发该请求。另外,您提到如果我异步获取请求,我可以在请求期间做其他工作,问题 #2 是没有。其余的都在 200 毫秒内完成。
  • 我想你需要硬着头皮为更多的 CPU 时间买单。
  • 谢谢,我不知道异步请求是可能的。
【解决方案2】:

您应该更改应用程序的设计。

而不是针对每个用户请求从 App Engine 向 Twitter 发出请求:

  • 如果可能,请使用 JavaScript 在用户浏览器中执行请求。
  • 在 urlfetch 之后,将 Twitter 的响应存储在数据存储中,因为在下一个请求时调用数据存储会更快。如果你可以在 memcache 中缓存一些东西,那就更好了。
  • 借助 cron 作业和任务队列定期更新存储的数据。

【讨论】:

  • 嗯。由于我使用了两个调用:user_timelinestatuses_followers,它们都不需要身份验证,我想我几乎可以使用 javascript 并存储搜索引擎爬虫的结果。似乎是个好主意,谢谢!
  • 我倾向于直接从客户端使用 Twitter API。如果您没有进行过多的服务器端运算,这相当简单。
猜你喜欢
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
相关资源
最近更新 更多