2011-05-04 13 views
5

Oldukça sık GAE'nin dosya yüklemek mümkün değildir ve aşağıdaki hatayı alıyorum:Hata durumunda birkaç kez daha urlfetch.fetch nasıl denenir?

ApplicationError: 2 
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/picasa2vkontakte/1.348093606241250361/picasa2vkontakte.py", line 109, in post 
    headers=headers 
    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 355, in _get_fetch_result 
    raise DownloadError(str(err)) 
DownloadError: ApplicationError: 2 

Nasıl böyle bir hata durumunda yeniden deneme yapmak gerekir?

cevap

9

Bu işi the task queue'a taşıyın. Görevler başarısız olduğunda, otomatik olarak tekrar dener. Başarısız kalmaya devam ederse, sistem yavaş yavaş yeniden deneme sıklığını bir saatte bir saat kadar yavaşlatır. Bu, bir kerelik yeniden deneme mantığını uygulamadan API taleplerini hız sınırlı hizmetlerle ele almanın kolay bir yoludur. Eğer gerçekten eşzamanlı isteklerini işlemek gerekiyorsa

, böyle bir şey çalışması gerekir: Ayrıca varsayılan zaman aşımı süresini iki katına çıkarmak urlfetch.fetch için deadline=10 geçebilir

for i in range(3): 
    try: 
    result = urlfetch.fetch(...) 
    # run success conditions here 
    break 
    except DownloadError: 
    #logging.debug("urlfetch failed!") 
    pass 

.

+0

Teşekkürler, @Drew Sears. Status_code'ı doğrulamak doğru olur: eğer result.status_code == 200: break'? –

+0

Gerekli olmamalı. Getirme bir hata kodu (404, 500) döndürürse, bir istisna atılır ve mola dahil olmak üzere try bloğunda başka hiçbir şey çalışmaz. –

İlgili konular