@retry_on_timeout(retries=10, secs=0.2)
def some_idempotent_function():  # do stuff

If you do not give retries or secs it defaults to 3 retries with 1 sec
starting delay. The delay is exponential, it doubles after each retry.

2009/8/25 Devel63 <danstic...@gmail.com>

>
> Can you give an example as to how this is used?  I understand the
> purpose, I'm just a little hazy on the calling syntax.
>
> On Aug 24, 5:25 am, Alkis Evlogimenos ('Αλκης Ευλογημένος)
> <evlogime...@gmail.com> wrote:
> > You can make it into a decorator which will make it easier for your
> > functions to code. I use this:
> > def retry_on_timeout(retries=3, secs=1):
> >   """A decorator to retry a given function performing db operations."""
> >   def _decorator(func):
> >     def _wrapper(*args, **kwds):
> >       tries = 0
> >       while True:
> >         try:
> >           tries += 1
> >           return func(*args, **kwds)
> >         except db.Timeout, e:
> >           logging.debug(e)
> >           if tries > retries:
> >             raise e
> >           else:
> >             wait_secs = secs * tries ** 2
> >             logging.warning("Retrying function %r in %d secs" % (func,
> > wait_secs))
> >             time.sleep(wait_secs)
> >     return _wrapper
> >   return _decorator
> >
> >
> >
> > On Mon, Aug 24, 2009 at 1:53 PM, Bemmu <bemmu....@gmail.com> wrote:
> >
> > > I decided to finally do something about the Timeout exceptions
> > > littering my log.
> >
> > > I read somewhere on this forum that I am supposed to code around data
> > > store accesses to try things out several times in case of timeouts. Is
> > > this still necessary? Why won't the methods just do that internally?
> >
> > > This is my first attempt to handle a timeout situation, is there any
> > > nicer way to code this?
> >
> > >        retries = 3
> > >        retry = True
> > >        while retry:
> > >                try:
> > >                        retry = False
> > >                        recipient.put()
> > >                except:
> > >                        retries -= 1
> > >                        if retries > 0:
> > >                                retry = True
> > >                                logging.info("recipient.put() failed,
> > > retrying")
> > >                        else:
> > >                                logging.error("failed even after trying
> > > recipient.put() three
> > > times")
> >
> > --
> >
> > Alkis
> >
>


-- 

Alkis

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to