应用引擎:是时间。睡觉()计算我的配额?

2024-04-29 22:50:38 发布

您现在位置:Python中文网/ 问答频道 /正文

嘿。我正在开发一个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调用之间产生延迟呢?在

谢谢。在


Tags: import应用程序编码footimedef仪表板sleep
3条回答

你的实验证明时间。睡觉时间是按你的配额计算的。看看实验的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可以接受的任何值。在

这样,每个地理代码都会运行,而且您永远不会超过您设置的速率限制,而且您不需要做任何管道工程。在

相关问题 更多 >