Google app engine GMail API:对任务进行排队,这样它们就不会';我不受费率限制

Google app engine GMail API:对任务进行排队,这样它们就不会';我不受费率限制,google-app-engine,gmail-api,rate-limiting,ratelimit,Google App Engine,Gmail Api,Rate Limiting,Ratelimit,我正试图通过我们的服务获取大量用户的电子邮件。我首先得到一个消息列表,如果消息不在数据存储中,那么我们获取它们。但是,我使用延迟库来避免死线超出错误。目前的算法是: 将每个用户任务置于队列中 对于每个用户,获取消息列表 对于此列表中的每10条消息,排队一次获取10条消息 然而,我意识到这也超过了速率限制,因为我可以每秒进行10次以上的查询。当我试图一次只发送一条消息而不是10条,并包括获取消息列表(这会对每一页电子邮件发出一个网络请求)时,我收到一个错误,说我使用了太多内存,进程被关闭。 最好的

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

  • 将每个用户任务置于队列中
  • 对于每个用户,获取消息列表
  • 对于此列表中的每10条消息,排队一次获取10条消息
  • 然而,我意识到这也超过了速率限制,因为我可以每秒进行10次以上的查询。当我试图一次只发送一条消息而不是10条,并包括获取消息列表(这会对每一页电子邮件发出一个网络请求)时,我收到一个错误,说我使用了太多内存,进程被关闭。
    最好的算法是什么,这样我就可以确保我到GMail的速度始终低于10 qps,但不会耗尽内存?

    如果在您描述的场景中内存耗尽,这意味着您的代码中存在内存泄漏或无限循环。10个查询可以在尽可能小的实例上轻松处理。

    我不认为达到速率限制有什么大不了的,只要确保处理错误并在这种情况下稍微慢一点即可。以10条消息为一批获取消息似乎很好。

    通常这是一个合理的假设,但这个答案是否正确?他的任务不会导致10条消息同时出现内存问题。可以合理地假设一个包含1条消息的任务更小,而不是更大。