Pregunta

¿Alguien tiene alguna experiencia con la siguiente excepción cuando se utiliza GAE urlfetch?

      DownloadError: ApplicationError: 2 timed out

Estoy intentando enviar una solicitud HTTP POST. De esta manera:

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

He tratado de establecer fecha límite para el máximo (10 segundos). La solicitud de la línea de comandos (usando enrollamiento o httplib2) tarda aproximadamente un segundo.

       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

Aquí está la salida desde el servidor de aplicaciones dev para la solicitud de rizo (estoy usando appengine-resto-servidor):

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

Aquí está la salida cuando trato de usar 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 -
¿Fue útil?

Solución

El servidor web de desarrollo es de un solo subproceso. No se puede hacer una solicitud de su aplicación que se ejecuta en su interior a sí mismo. Pruebe a ejecutar dos instancias en puertos diferentes.

Por cierto, esto no debería ser un problema una vez que se despliega, como el servidor AppEngine real es, por supuesto, capaz de manejar múltiples peticiones simultáneas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top