Превышен крайний срок при размещении нескольких карточек на временной шкале с прикрепленным видео

во-первых, я использую python вместо gae и пытаюсь отправить карточку с видео-приложением всем пользователям, которые посетили мою стеклянную посуду. Это код:

        #posting video
        media_link = util.get_full_url(self, '/static/video/man_on_the_moon.mp4')
        resp = urlfetch.fetch(media_link, deadline=2000)
        media_video = MediaIoBaseUpload(io.BytesIO(resp.content), mimetype='video/vnd.google-glass.stream-url',
                                            resumable=True)

        users = Credentials.all()
        for user in users:
            creds = StorageByKeyName(Credentials, user.key().name(), 'credentials').get()
            mirror_service = util.create_service('mirror', 'v1', creds)
            timeline_item = {'text': 'video mode v3'}
            mirror_service.timeline().insert(body=timeline_item, media_body=media_video).execute()

На моем локальном компьютере этот код работает безупречно, но его развертывание на gae генерирует следующее:

: HTTPException: Deadline exceeded while waiting for HTTP response from URL: https://www.googleapis.com/upload/mirror/v1/timeline?uploadType=resumable&alt=json&upload_id=AEnB2UqeMjtTAaB7wWw-8yuVoaBdxaD5-mkFx2TJo7PynEXmVCkPLlDFo0l_1t8du_JetszdgmHXF9d-VuD8N0XmwXQVBMynow

Любая идея о том, как решить эту проблему? Насколько я понял, timeline().insert загружает media_body каждый раз для каждого пользователя, которому я отправляю карту. Мне кажется, это довольно ресурсоемко. Верно?

Еще раз спасибо ребята

это полный стек:

    Deadline exceeded while waiting for HTTP response from URL: https://www.googleapis.com/upload/mirror/v1/timeline?uploadType=multipart&alt=json
Traceback (most recent call last):
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1511, in __call__
    rv = self.handle_exception(request, response, e)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1505, in __call__
    rv = self.router.dispatch(request, response)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1077, in __call__
    return handler.dispatch()
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 547, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 545, in dispatch
    return method(*args, **kwargs)
  File "/base/data/home/apps/s~watchup-stage/1.369179617747477845/main_handler.py", line 340, in post
    mirror_service.timeline().insert(body=timeline_item, media_body=media_video).execute()
  File "lib/oauth2client/util.py", line 128, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "lib/apiclient/http.py", line 676, in execute
    body=self.body, headers=self.headers)
  File "lib/oauth2client/util.py", line 128, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "lib/oauth2client/client.py", line 490, in new_request
    redirections, connection_type)
  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 "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/httplib.py", line 500, in getresponse
    raise HTTPException(str(e))
HTTPException: Deadline exceeded while waiting for HTTP response from URL: https://www.googleapis.com/upload/mirror/v1/timeline?uploadType=multipart&alt=json

person FaustoDassenno    schedule 25.07.2013    source источник
comment
Это должно работать, но более подробная информация поможет устранить неполадки. Можно ли вставить другие элементы временной шкалы в Glass из App Engine? Есть ли что-нибудь еще в журнале ошибок? Можете ли вы получить доступ к видео с помощью неаутентифицированного клиента (например, cURL командной строки или окна Chrome в режиме инкогнито)?   -  person mimming    schedule 26.07.2013
comment
Привет Дженни, спасибо за ответ. Я могу публиковать изображения с той же кодовой базой, поэтому я думаю, что это проблема, связанная с размером. Я определенно могу просмотреть файл ( watchup-stage.appspot.com/static/video /man_on_the_moon.mp4 ).   -  person FaustoDassenno    schedule 26.07.2013
comment
Еще журнал: response = conn.getresponse(): File /base/data/home/runtimes/python27/python27_dist/lib/python2.7/httplib.py, строка 500, в getresponse: поднять HTTPException(str(e)) : HTTPException: превышен крайний срок при ожидании ответа HTTP от URL: googleapis.com/upload/mirror/v1/   -  person FaustoDassenno    schedule 26.07.2013


Ответы (2)


Я тоже столкнулся с такой проблемой. Чтобы решить эту проблему, мне пришлось увеличить время ожидания для HTTP-запросов, а также перейти в очередь.

Я отправил запрос на включение в пример Google Mirror API Python, но он был отклонен, чтобы все было «просто».

Вы можете проверить мой diff на https://github.com/JessieAMorris/mirror-quickstart-python/commit/b67c0ecdf83207b0c3b596173c95a53804b23525.

В общем, синопсис такой:

  1. Переместить обработку в очередь
  2. импортировать urfetch и httplib2
  3. Увеличьте время ожидания для urfetch и httplib2 следующим образом:

    urlfetch.set_default_fetch_deadline(45)
    httplib2.Http(timeout=45) 
    

С этими изменениями я больше не получаю тайм-ауты.

person Jessie A. Morris    schedule 01.08.2013

У вас есть 60 секунд, чтобы выполнить внешний запрос в Google App Engine. Однако локально это ограничение, похоже, не действует.

Единственными вариантами для более длительной обработки являются очереди задач (10-минутный срок) и бэкэнды (неопределенный срок).

person Tombatron    schedule 28.07.2013
comment
Хорошо, спасибо за ваше предложение. Я попытался перенести логику в очередь. В локальном все работает как шарм, но в prod я получил это через 15 секунд после запуска задания: 2013-07-31 11:27:15.725 Превышен крайний срок при ожидании ответа HTTP от URL: googleapis.com/upload/mirror/v1/ - person FaustoDassenno; 31.07.2013
comment
Интересно. Можете ли вы поделиться всем стеком вызовов? Действительно ли MediaIoBaseUpload загружает файл? - person Tombatron; 31.07.2013
comment
Я ошибся, поведение непоследовательно. Теперь ошибка вернулась. HTTPException: превышен крайний срок ожидания ответа HTTP от URL: googleapis.com/upload/mirror/v1/ И обработчик вызывается из очереди. - person FaustoDassenno; 01.08.2013
comment
Я просто не вижу это правильно или возможно, что запрос, который истекает по тайм-ауту, исходит из httplib2, на который вы ссылались? Если это так, то, вероятно, это просто вопрос того, что крайний срок, который вы устанавливаете, не просачивается. - person Tombatron; 01.08.2013