2011-04-05 20 views
2

新的python和appengine。有一個我玩過的小玩具,昨天晚上遇到了一些腳本超時。我知道你在10秒內上限。處理這個問題的最佳做法是什麼?Google Appengine URLFetch超時 - 任何最佳實踐?

編輯

對不起,應該已經比較清楚了。 URLFetch超時是我遇到的問題。默認情況下,它被設置爲5秒,最大值爲10

Traceback (most recent call last): 
    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 636, in __call__ 
    handler.post(*groups) 
    File "/base/data/home/apps/netlicense/3.349495357411133950/main.py", line 235, in post 
    graph.put_wall_post(message=body, attachment=attch, profile_id=self.request.get("fbid")) 
    File "/base/data/home/apps/netlicense/3.349495357411133950/facebook.py", line 149, in put_wall_post 
    return self.put_object(profile_id, "feed", message=message, **attachment) 
    File "/base/data/home/apps/netlicense/3.349495357411133950/facebook.py", line 131, in put_object 
    return self.request(parent_object + "/" + connection_name, post_args=data) 
    File "/base/data/home/apps/netlicense/3.349495357411133950/facebook.py", line 179, in request 
    file = urllib2.urlopen(urlpath, post_data) 
    File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 124, in urlopen 
    return _opener.open(url, data) 
    File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 381, in open 
    response = self._open(req, data) 
    File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 399, in _open 
    '_open', req) 
    File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 360, in _call_chain 
    result = func(*args) 
    File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 1115, in https_open 
    return self.do_open(httplib.HTTPSConnection, req) 
    File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 1080, in do_open 
    r = h.getresponse() 
    File "/base/python_runtime/python_dist/lib/python2.5/httplib.py", line 197, in getresponse 
    self._allow_truncated, self._follow_redirects) 
    File "/base/python_runtime/python_lib/versions/1/google/appengine/api/urlfetch.py", line 260, in fetch 
    return rpc.get_result() 
    File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 592, in get_result 
    return self.__get_result_hook(self) 
    File "/base/python_runtime/python_lib/versions/1/google/appengine/api/urlfetch.py", line 361, in _get_fetch_result 
    raise DeadlineExceededError(str(err)) 
DeadlineExceededError: ApplicationError: 5 

回答

4

你還沒有告訴我們您的應用程序的功能,所以這裏有一些通用的建議:

  1. 您可以捕獲超時exception與此例外類google.appengine.api.urlfetch.DownloadError並輕輕提醒用戶重試。
  2. Web請求運行時間最長爲30秒;如果您嘗試下載的內容相對較小,則可能會捕獲異常並在同一Web請求內重新提交(僅一次)urlfetch。
  3. 如果離線工作對您的應用不是問題,您可以將Urlfetch調用移動到由Task Queue服務的工作任務;使用taskqueue API的一個優點是App Engine會自動重試Urlfetch任務,直到成功爲止。
+0

它正在從數據存儲中讀取一個條目,並使用圖形api將消息發佈到用戶的Facebook提要。然後重定向到「完成」頁面。失敗是在牆柱之後的某個時候,因爲那些一直是成功的。 – 2011-04-05 18:56:55

+0

@Joey你確定這是Urlfetch失敗嗎? – systempuntoout 2011-04-05 19:07:31

+0

很確定。添加棧跟蹤 – 2011-04-05 20:05:20