2016-09-15 10 views
1

私は、メッセージをユーザーの受信トレイに移動するためのアプリケーションを作成しています。現在、Gmail APIを使用していますが、IMAPを使用するよりもAPIへのリクエストが著しく遅くなっています。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 

私はすでに私の要求をバッチ処理し、gzippingだが、とフィールドを使って返される情報の量を制限しようとしました。これらはすべてperformance tipsページに記載されています。私はなぜ要求が完了するまでに時間がかかりすぎるのか理解するのに苦労しています。どんな提案も大歓迎です!

+0

比較のためにIMAPコードを表示できますか?また、あなたはどの言語を書いていますか? Pythonのように見えますか? – Schwern

+2

こんにちは@Schwern、私は比較するIMAPコードを追加しました。そして、はい、私はPythonで書いています。 Gmail APIよりもIMAPの方がメッセージスループットが優れている – frankjames

答えて

0

GMail APIを読んでいると、あなたはそれを「正しい」ようにしているようです。 GMail自体はメールクライアントなので、GMail APIはおもちゃのメールクライアントを書くことをターゲットにしているのに対し、IMAPは完全に機能するメールクライアントの効率的な一括処理のために設計されていると推測します。

の場合は、すべてというメッセージが古いラベルから新しいラベルに移動する場合は、代わりにrename the label using Users.labels.update

もしそうでなければ、メッセージではなくby threadで行うことでリクエスト数を減らすことができます。

IMAPを使用してください。

関連する問題