【问题标题】:App Engine: Is time.sleep() counting towards my quotas?App Engine:time.sleep() 是否计入我的配额?
【发布时间】:2023-03-17 19:40:01
【问题描述】:

嘿。我正在开发一个 App Engine 应用程序,该应用程序涉及对 Google Maps API 进行地理编码的查询。谷歌地图不喜欢太多的请求,所以我在每个请求之间用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 调用之间产生延迟的另一种方法是什么?

谢谢。

【问题讨论】:

    标签: python google-app-engine cprofile


    【解决方案1】:

    你当然不想在一个完全从头开始设计的系统中睡觉,以便在绝对最短的时间内完成请求:D

    您可以做的是为每个地理编码创建一个任务,(查看deferred library)。您想为此任务指定一个队列,然后只需将队列的速率限制设置为您认为地图地理编码器可能会感到舒服的任何值。

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

    【讨论】:

    • 我知道sleep 是个错误。谢谢!会读完的;)
    【解决方案2】:

    我相当肯定队列任务也计入 GAP 中的 CPU 使用率。关于sleep(),我不认为会有CPU“惩罚”,但我认为这是一种糟糕的风格。

    为什么要睡觉?在您的任务中,执行一次地理编码,然后在 3 秒内将另一个调用发布到队列中。调用http://code.google.com/intl/el/appengine/docs/python/taskqueue/functions.html#add时见参数countdown

    【讨论】:

    • 使用倒计时作为 defered.defer 的输入是我经常做的。
    【解决方案3】:

    您的实验证明 time.sleep 时间计入您的配额。看看实验性的Task Queue API。如果您的任务不是用户发起的,您也可以使用Cron 任务,但我不知道这是否能在如此小的间隔内正常工作。

    【讨论】:

    • 我实际上正在使用一个 Cron 作业,它每五分钟将一个任务添加到任务队列中。但是里面的任务仍然包含对sleep的调用。任务 CPU/s 不计入配额吗?我认为确实如此:code.google.com/appengine/docs/python/taskqueue/…
    • 其实没有,实验并不能证明sleep()计入配额。分析器显示进入和退出函数之间花了 3 秒,而不是 CPU 一直被占用。另一方面,Google 会按使用的 CPU 周期计费(就像您在 ps/top 看到的一样)
    【解决方案4】:

    这个Issue 报告说,记者没有为 time.sleep() 产生的 cpu 秒数计费,但它们显示在他们的 appstats 上。 appstats 很可能也使用 cprofile。睡眠对于试图制作更好的异步代理的人来说很重要,他可以使用这些代理对更大的项目集进行地理编码。

    http://code.google.com/p/googleappengine/issues/detail?id=3291

    【讨论】:

      猜你喜欢
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 2020-01-15
      相关资源
      最近更新 更多