嘿。我的工作,涉及到查询地理编码的谷歌地图API的App Engine应用程序。谷歌地图不喜欢太多的要求,所以我把与time.sleep(1)每个请求之间有1秒的延迟。

我发现我的配额在我GAE仪表盘运行低,决定运行一个短的测试:

import cProfile
import time

def foo():
    time.sleep(3)

cProfile.run('foo()')

这给了我以下输出:

   4 function calls in 3.003 CPU seconds
   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    3.003    3.003 <stdin>:1(foo)
        1    0.000    0.000    3.003    3.003 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
        1    3.003    3.003    3.003    3.003 {time.sleep}

因此,它说,这是耗时一个time.sleep(3) 3 CPU秒。现在,如果喜欢这些调用偏向于GAE提供了配额限制中我不知道。如果是的话,是什么使得API调用之间的延迟为地理编码的其他方式?

感谢。

有帮助吗?

解决方案

您肯定不希望试图睡在那是完全设计的从地上爬起来,以完成请求的绝对最短的时间内系统:d

您可以做什么,而不是,是为每个地理编码任务,(请查看递延库)。你要指定一个队列这个任务,那么就设置为任何你觉得地理编码器可能是熟悉地图的队列速率限制。

这样每个地理编码将运行,并且你永远不会比你设定的限速快,你不需要做任何管道。

其他提示

我相当肯定,队列中的任务也算朝着GAP CPU使用率。关于sleep(),我不认为会出现CPU“惩罚”从,但我认为这是一个不好的风格。

在所有

为什么要睡觉?在你的任务,做一个单一的地理编码和简单地张贴在3secs队列调用另一个自己。参见参数countdown当调用的http://代码.google.com /国际/ EL /应用服务引擎/文档/蟒/任务队列/ functions.html#附加

您实验证明,对您的配额time.sleep时间计数。看一看实验任务队列API 。如果你的任务不是用户发起的,你也可以使用克龙的任务,但我不知道这是否会这么小的间隔很好地工作。

问题报道称,记者尚未结算为)由time.sleep(CPU发生秒,但他们表现出了他们的将Appstats。这是非常有可能将Appstats用途CPROFILE为好。睡眠是人们试图使他可以使用地理编码较大的一组项目的更好asyncronous代理重要。

http://code.google.com/p/googleappengine/问题/细节?ID = 3291

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top