2016-09-15 56 views
1

我正在创建一个应用程序来移动用户收件箱中的邮件。目前我使用的是Gmail API,但我注意到向API发送请求比使用IMAP要慢得多。Gmail API messages.modify比IMAP慢40倍?

该方法非常简单:我发送一批修改请求来更改一组电子邮件上的标签,以便移动它们。我使用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页面上。我很难理解为什么这些请求需要很长时间才能完成。任何建议将不胜感激!

+0

你能展示你的IMAP代码进行比较吗?另外,你在写什么语言?看起来它可能是Python? – Schwern

+2

Hi @Schwern,我已经添加了IMAP代码进行比较。是的,我正在用Python编写 - 如果以前不清楚,我的错误!我发现IMAP比Gmail API有更好的消息吞吐量,这很奇怪 – frankjames

回答

0

通过阅读GMail API,你似乎在做“正确”。我会猜测,因为GMail本身就是一个邮件客户端,所以GMail API的目标是编写玩具邮件客户端,而IMAP更适合全功能邮件客户端的高效批量工作。

如果您将每隔消息从旧标签移动到新标签,或许改为rename the label using Users.labels.update

如果不是,您可以通过执行by thread而不是通过消息来减少请求数。

或者只是使用IMAP。