2010-01-07 3 views
11

GAE urlfetch를 사용할 때 다음 예외가있는 사용자가 있습니까?GoogleAppEngine urlfetch 시간 초과 예외

 DownloadError: ApplicationError: 2 timed out 

HTTP POST 요청을 보내려고합니다. 좋아요 :

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

마감 시간을 최대 (10 초)로 설정하려고했습니다. 커맨드 라인 (curl 또는 httplib2 사용)의 요청은 약 1 초가 걸립니다. 내가 URL을 가져올 사용하려고하면

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 

여기에 출력입니다 : 여기

 [email protected] ~ $ 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 

은 컬 요청 (I AppEngine에 받침대 서버를 사용하고 있습니다)에 대한 dev에 애플리케이션 서버의 출력입니다 :

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 - 
+1

현재 해결 방법은 try/except pass 블록에 urlfetch 호출을 래핑하는 것입니다. – nafe

+0

이 통화 중에 서버에서 어떤 일이 발생했는지 확인할 수 있습니까? 페이로드를 올바르게 처리하고 키를 반환합니까? 사후 데이터의 가치는 귀하가 생각하는 것입니까? –

+0

안녕하세요 알렉스, 서버가 POST 요청을 받고 그것은 호출에 따라 새로운 Obj를 만들고 있습니다. – nafe

답변

12

개발 웹 서버는 단일 스레드입니다. 내부에서 실행중인 응용 프로그램에서 자체 요청을 할 수 없습니다. 다른 포트에서 두 개의 인스턴스를 실행 해보십시오.

실제 AppEngine 서버는 물론 여러 동시 요청을 처리 할 수 ​​있기 때문에 이것은 배포 된 후에도 문제가되지 않습니다.

+0

이것은 매우 유망한 질문과 같습니다. 나는 그것을 밖으로 시도하고 다시 당신에게 돌아갈거야. 감사! – nafe

+2

이것은 _ 문서에 있습니다. – bobobobo

+0

이것은 정확하게 문제가되었습니다. urlfetch의 송신자와 수신자를 별도의 서버로 분리하면 내 문제가 해결되었습니다. – nafe