का उपयोग करते समय DeadlineExceededError को संभालने में असमर्थ मेरे पास इस मूल उपयोगिता वर्ग को समानांतर में संक्षिप्त URL (संभवतः) संक्षिप्त URL प्राप्त होते हैं और एक शब्दकोश देता है जिसमें अंतिम URL होते हैं। यह wait_any कार्यक्षमता का उपयोग करता है जिसे इस blog post में वर्णित किया गया था।UrlFetch
class UrlFetcher(object):
@classmethod
def fetch_urls(cls,url_list):
rpcs = []
for url in url_list:
rpc = urlfetch.create_rpc(deadline=5.0)
urlfetch.make_fetch_call(rpc, url,method = urlfetch.HEAD)
rpcs.append(rpc)
result = {}
while len(rpcs) > 0:
rpc = apiproxy_stub_map.UserRPC.wait_any(rpcs)
rpcs.remove(rpc)
request_url = rpc.request.url()
try:
final_url = rpc.get_result().final_url
except AttributeError:
final_url = request_url
except DeadlineExceededError:
logging.error('Handling DeadlineExceededError for url: %s' %request_url)
final_url = None
except (DownloadError,InvalidURLError):
final_url = None
except UnicodeDecodeError: #Funky url with very evil characters
final_url = unicode(rpc.get_result().final_url,'utf-8')
result[request_url] = final_url
logging.info('Returning results: %s' %result)
return result
भले ही मैं DeadlineExceededError को संभालने का प्रयास करता हूं, एप्लिकेशन लॉग अन्यथा दिखाते हैं।
2011-04-20 17:06:17.755
UrlFetchWorker started
E 2011-04-20 17:06:22.769
The API call urlfetch.Fetch() took too long to respond and was cancelled.
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/tweethitapp/1.349863151373877476/tweethit/handlers/taskworker.py", line 80, in post
result_dict = UrlFetcher.fetch_urls(fetch_targets)
File "/base/data/home/apps/tweethitapp/1.349863151373877476/tweethit/utils/rpc.py", line 98, in fetch_urls
final_url = rpc.get_result().final_url
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 345, in _get_fetch_result
rpc.check_success()
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 558, in check_success
self.__rpc.CheckSuccess()
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_rpc.py", line 133, in CheckSuccess
raise self.exception
DeadlineExceededError: The API call urlfetch.Fetch() took too long to respond and was cancelled.
W 2011-04-20 17:06:22.858
Found 1 RPC request(s) without matching response (presumably due to timeouts or other errors)
मुझे यहां क्या याद आ रही है? क्या DeadlineExceededError को संभालने का कोई अन्य तरीका है?
या क्या विभिन्न प्रकार के डेडलाइन एक्स्प्लेड एरर्स हैं और मैं गलत आयात कर रहा हूं? मैं उपयोग कर रहा हूँ: from google.appengine.runtime import DeadlineExceededError
"google.appengine.runtime आयात apiproxy_errors से" आयात कर रहा है और उसके बाद का उपयोग कर "को छोड़कर: इसके अलावा यह देखते हुए कि (कम से कम देव अनुप्रयोग सर्वर 1.7.1 में),
urlfetch_errors.DeadlineExceededError
DownloadError
का एक उपवर्ग, जो समझ में आता है है लायक apiproxy_errors.DeadlineExceeded त्रुटि: "खंड त्रुटि को पकड़ने लगता है। धन्यवाद! –