Исключение GoogleAppEngine urlfetch тайм-аута

Кто-либо получил опыт за следующим исключением при использовании GAE urlfetch?

      DownloadError: ApplicationError: 2 timed out

Я пытаюсь отправить запрос POST HTTP. Как так:

      result = urlfetch.fetch('http://api.nathan.com:8080/Obj/',
                              method='POST',
                              payload=postdata,
                              deadline=10)

Я попытался установить крайний срок к макс. (10 секунд). Запрос из командной строки (использующий завихрение или httplib2) занимает приблизительно секунду.

       nchong@almond ~ $ time curl
                         -d "<Obj><a>1</a><b>n</b></Obj>"
                         http://api.nathan.com:8080/Obj/
       agd1c2VyYXBpcgoLEgRTZXNzGAIM      #< key returned by call
       real 0m1.109s
       user 0m0.003s
       sys  0m0.009s

Вот вывод от dev appserver для вихревого запроса (я использую appengine-rest-server):

INFO     __init__.py:819] adding models from module __main__
INFO     __init__.py:867] added model Obj with type <class '__main__.Obj'>
INFO     dev_appserver.py:3243] "POST /Obj HTTP/1.1" 200 -
INFO     dev_appserver_index.py:205] Updating /path/to/index.yaml

Вот вывод, когда я пытаюсь использовать urlfetch:

ERROR    __init__.py:388] ApplicationError: 2 timed out
Traceback (most recent call last):
  File "/path/to/webapp/__init__.py", line 507, in __call__
    handler.get(*groups)
  File "/path/to/myapp/main.py", line 62, in get
    result = urlfetch.fetch(...)
  File "/path/to/urlfetch.py", line 241, in fetch
    return rpc.get_result()
  File "/path/to/apiproxy_stub_map.py", line 501, in get_result
    return self.__get_result_hook(self)
  File "/path/to/urlfetch.py", line 325, in _get_fetch_result
    raise DownloadError(str(err))
DownloadError: ApplicationError: 2 timed out
INFO     dev_appserver.py:3243] "GET / HTTP/1.1" 500 -
INFO     dev_appserver.py:3243] "POST /Obj/ HTTP/1.1" 200 -
11
задан nafe 7 January 2010 в 18:47
поделиться

1 ответ

Веб-сервер разработки однопоточный. Вы не можете сделать запрос от своего приложения, запущенного внутри него, к самому себе. Попробуйте запустить два экземпляра на разных портах.

Кстати, это не должно стать проблемой после развертывания, так как реальный сервер AppEngine, конечно же, способен обрабатывать несколько одновременных запросов.

12
ответ дан 3 December 2019 в 09:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: