GMail API:排队任务,因此他们不会受到速率限制

时间:2014-10-25 06:59:21

标签: google-app-engine gmail-api rate-limiting ratelimit

我正在尝试通过我们的服务获取大量用户的电子邮件。我首先得到一个消息列表,如果消息不在DataStore中,那么我们将获取它们。但是,我使用延迟库来避免DeadlineExceeded错误。目前的算法是:

  1. 将每个用户任务放在队列中
  2. 对于每个用户,获取消息列表
  3. 对于此列表中的每10封邮件,请一次排队以获取邮件。
  4. 然而,我意识到这也超过了速率限制,因为我可以做超过10次查询/秒。当我尝试一次只发送一条消息而不是10条消息时,包括获取消息列表(每个电子邮件页面都有1个网络请求),我收到一条错误消息,说我使用了太多内存而且我的进程是关掉。 什么是最好的算法,所以我可以确保我总是低于10 qps GMail,但没有内存耗尽?

2 个答案:

答案 0 :(得分:1)

我不认为达到速率限制是一件大事,只要确保你处理错误并在这种情况下放慢一点。分批获取10条消息似乎很好。

答案 1 :(得分:0)

如果在您描述的场景中内存不足,则表示您的代码中存在内存泄漏或无限循环。可以在最小的实例上轻松处理10个查询。