2011-04-21 7 views
15

का उपयोग करते समय 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

उत्तर

20

प्रति इनलाइन डॉक्स google.appengine.runtime.DeadlineExceededError के लिए:

Exception raised when the request reaches its overall time limit.

Not to be confused with runtime.apiproxy_errors.DeadlineExceededError. That one is raised when individual API calls take too long.

यही कारण है कि आप योग्य आयात का उपयोग करना चाहिए का एक अच्छा प्रदर्शन (from google.appengine import runtime, तो संदर्भ runtime.DeadlineExceededError) है, भी!

+5

"google.appengine.runtime आयात apiproxy_errors से" आयात कर रहा है और उसके बाद का उपयोग कर "को छोड़कर: इसके अलावा यह देखते हुए कि (कम से कम देव अनुप्रयोग सर्वर 1.7.1 में), urlfetch_errors.DeadlineExceededErrorDownloadError का एक उपवर्ग, जो समझ में आता है है लायक apiproxy_errors.DeadlineExceeded त्रुटि: "खंड त्रुटि को पकड़ने लगता है। धन्यवाद! –

10

आप अंदाज़ा लगा और दूसरों बताया गया है, आप चाहते हैं एक अलग DeadlineExceededError:

https://developers.google.com/appengine/articles/deadlineexceedederrors से जून 2012:

Currently, there are several errors named DeadlineExceededError for the Python runtime:>

google.appengine.runtime.DeadlineExceededError: raised if the overall request times out, typically after 60 seconds, or 10 minutes for task queue requests;

google.appengine.runtime.apiproxy_errors.DeadlineExceededError: raised if an RPC exceeded its deadline. This is typically 5 seconds, but it is settable for some APIs using the 'deadline' option;

google.appengine.api.urlfetch_errors.DeadlineExceededError: raised if the URLFetch times out.

पकड़ने google.appengine.api.urlfetch_errors.DeadlineExceededError मेरे लिए चाल कर रहा है।

class DeadlineExceededError(DownloadError): 
    """Raised when we could not fetch the URL because the deadline was exceeded. 

    This can occur with either the client-supplied 'deadline' or the system 
    default, if the client does not supply a 'deadline' parameter. 
    """ 
+0

हाँ यह मेरे लिए काम किया। https://developers.google.com/appengine/articles/deadlineexceedederrors। मेरे मामले में बाहर निकलता है यह एक urlfetch त्रुटि थी। – enkash

संबंधित मुद्दे