Frage

Hat jemand Erfahrung mit der folgenden Ausnahme bekommt, als GAE urlfetch mit?

      DownloadError: ApplicationError: 2 timed out

Ich versuche, eine HTTP POST-Anforderung zu senden. Wie so:

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

Ich habe versucht, Frist, die Max-Einstellung (10 Sekunden). Die Anforderung von der Befehlszeile (mit curl oder httplib2) dauert ungefähr eine Sekunde.

       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

Hier ist die Ausgabe von dem Entwickler appserver für die curl Anfrage (Ich verwende 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

Hier ist der Ausgang, wenn ich versuche zu verwenden 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 -
War es hilfreich?

Lösung

Der Entwicklungs-Webserver ist single-threaded. Sie können eine Anfrage aus Ihrer Anwendung innerhalb sie selbst laufen machen. Versuchen Sie, zwei Instanzen auf verschiedenen Ports.

By the way, sollte dies kein Problem sein, wenn sie im Einsatz ist, als die tatsächlichen AppEngine Server natürlich in der Lage ist, mehrere gleichzeitigen Anfragen zu bearbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top