嘿。我正在开发一个appengine应用程序,它涉及到googlemapsapi的地理编码查询。googlemaps不喜欢太多的请求,所以我在每个请求之间用time.sleep(1)
设置1秒的延迟。在
我注意到我的GAE仪表板中的配额不足,于是决定运行一个简短的测试:
import cProfile
import time
def foo():
time.sleep(3)
cProfile.run('foo()')
结果是:
^{pr2}$所以它说一个time.sleep(3)
要消耗3cpu秒。现在我想知道这样的调用是否计入GAE提供的配额限制中。如果是这样的话,还有什么方法可以在对地理编码的API调用之间产生延迟呢?在
谢谢。在
你的实验证明时间。睡觉时间是按你的配额计算的。看看实验的Task Queue API。如果您的任务不是由用户启动的,那么您也可以使用Cron任务,但是我不知道在这么短的时间间隔内这是否能正常工作。在
我相当肯定队列任务也会计入GAP中的CPU使用量。关于
sleep()
,我不认为会有CPU“惩罚”,但我认为这是一种不好的风格。在为什么要睡觉?在您的任务中,只需进行一次地理编码,然后在3sec内将另一次调用发送到队列中。调用http://code.google.com/intl/el/appengine/docs/python/taskqueue/functions.html#add时,请参见参数
countdown
。在你当然不想在一个完全从头设计的系统中睡觉,在尽可能短的时间内完成请求:D
相反,您可以为每个地理代码创建一个任务(查看deferred library)。您需要为这个任务指定一个队列,然后只需将队列的速率限制设置为您认为mapsegocoder可以接受的任何值。在
这样,每个地理代码都会运行,而且您永远不会超过您设置的速率限制,而且您不需要做任何管道工程。在
相关问题 更多 >
编程相关推荐