5

私たちのアプリは、Google App Engine、Python ランタイム (2.7) にデプロイされ、Drive API を使用しています。HTTPExceptionさまざまなエンドポイント (ドライブ、OAuth など) で、締め切りを超えたためにますますキャッチします。

5 回の試行で指数バックオフ メカニズムを実装しました。私たちのアプリはますますこの制限に達しています (たとえば、今朝はこれらの例外がたくさんありました)。

この問題の原因は何ですか? タイムアウト遅延を増やすことは可能ですか?

ご協力いただきありがとうございます。

完全なスタック トレース (OAuth2 API) は次のとおりです。

2013-06-07 21:11:10,851 ERROR An error occurred : Deadline exceeded while waiting for HTTP response from URL: https://accounts.google.com/o/oauth2/token
Traceback (most recent call last):
  File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 545, in dispatch
    return method(*args, **kwargs)
  File "/base/data/home/apps/s~unishared-gae/production.367909734400765242/main.py", line 733, in get
    creds = self.GetCodeCredentials() or self.GetSessionCredentials()
  File "/base/data/home/apps/s~unishared-gae/production.367909734400765242/main.py", line 301, in GetCodeCredentials
    creds = oauth_flow.step2_exchange(code)
  File "lib/oauth2client/util.py", line 128, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "lib/oauth2client/client.py", line 1283, in step2_exchange
    headers=headers)
  File "lib/httplib2/__init__.py", line 1570, in request
    (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
  File "lib/httplib2/__init__.py", line 1317, in _request
    (response, content) = self._conn_request(conn, request_uri, method, body, headers)
  File "lib/httplib2/__init__.py", line 1286, in _conn_request
    response = conn.getresponse()
  File "/python27_runtime/python27_dist/lib/python2.7/httplib.py", line 500, in getresponse
    raise HTTPException(str(e))
4

1 に答える 1

1

2011 年に公開されたこのブログ投稿では、Decorator を使用する代わりにメタクラスを使用して DeadlineExceededError をキャッチする方法について説明しています。これがあなたを導き、解決するかどうかはわかりませんが、役立つかもしれないアイデアを提供します.

from google.appengine.api import mail
from google.appengine.ext.deferred import defer
from google.appengine.ext.webapp import RequestHandler
from google.appengine.runtime import DeadlineExceededError
import sys
from traceback import format_exception
from SOME_APP_SPECIFIC_LIBRARY import serve_500
from LAST_POST import email_admins

class DecorateHttpVerbsMetaclass(type):

    def __new__(cls, name, bases, cls_attr):
        verbs = ['get', 'post', 'put', 'delete']
        for verb in verbs:
            if verb in cls_attr and isinstance(cls_attr[verb], function):
                cls_attr[verb] = deadline_decorator(cls_attr[verb])

        return super(DecorateHttpVerbsMetaclass, cls).__new__(cls, name,
                                                              bases, cls_attr)

class ExtendedHandler(RequestHandler):
    __metaclass__ = DecorateHttpVerbsMetaclass

    def handle_exception(self, exception, debug_mode):
        traceback_info = ''.join(format_exception(*sys.exc_info()))
        email_admins(traceback_info, defer_now=True)

        serve_500(self)
于 2014-11-25T08:27:04.317 に答える