【问题标题】:Gmail API messages.modify 40x slower than IMAP?Gmail API messages.modify 比 IMAP 慢 40 倍?
【发布时间】:2017-01-22 22:48:52
【问题描述】:

我正在创建一个应用程序来移动用户收件箱中的消息。目前我正在使用 Gmail API 来执行此操作,但我注意到向 API 发出请求明显比使用 IMAP 慢。

方法很简单:我正在发送一批修改请求来更改一组电子邮件的标签,以便移动它们。我使用 Gmail API 的消息吞吐量为 3.3 条消息/秒。相比之下,IMAP 吞吐量为 130 条消息/秒。

这是我目前使用 BatchHttpRequests 的方式:

batch = BatchHttpRequest()
for gmailId in gmailIds:
    batch.add(self.service.users().messages().modify(userId=self.user.email, id=gmailId, body=labels))
try:
    batch.execute()
except errors.HttpError, error:
    log_this_error(self.user.email, error.resp.status)

这是我完成相同任务的 IMAP 代码:

# imap_conn is the user's authed connection
status, count = imap_conn.select(oldMailboxLabel)
if status == "OK":
    count = int(count[0])
    if count > 0:
        messageNumbers = range(1, count + 1)
        messageNumbers = ",".join(map(str, messageNumbers))
        imap_conn.copy(messageNumbers, newMailboxLabel)
        imap_conn.close()
        imap_conn.delete(oldMailboxLabel)
    else:
        imap_conn.close()
else:
    count = 0

我已经在对我的请求进行批处理和 gzip 压缩,并且我尝试使用字段来限制返回的信息量。所有这些都在他们的performance tips 页面上提出。我很难理解为什么请求需要这么长时间才能完成。任何建议将不胜感激!

【问题讨论】:

  • 您能显示您的 IMAP 代码以进行比较吗?另外,你用什么语言写的?看起来可能是 Python?
  • 嗨@Schwern,我添加了 IMAP 代码进行比较。是的,我正在用 Python 编写代码——如果之前不清楚的话,我的错!我发现 IMAP 的邮件吞吐量比 Gmail API 更好,这很奇怪

标签: python imap gmail-api


【解决方案1】:

通过 GMail API 阅读您似乎“正确”地进行了操作。我猜是因为 GMail 本身就是一个邮件客户端,所以 GMail API 的目标是编写玩具邮件客户端,而 IMAP 则更好地为功能齐全的邮件客户端的高效批量工作而设计。

如果您要将 每条 消息从旧标签移动到新标签,也许是 rename the label using Users.labels.update

如果没有,您可以通过 by thread 而不是消息来减少请求的数量。

或者只使用 IMAP。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-23
    • 2021-04-12
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 2014-01-21
    相关资源
    最近更新 更多