From d928641f7afde57ac012f9915dc44ebf5292c060 Mon Sep 17 00:00:00 2001 From: bernat Date: Tue, 22 Mar 2005 09:17:28 +0100 Subject: [PATCH] Backoff exponentiel pour tenter de robtenir le lock. darcs-hash:20050322081728-d1718-a0c77f2ee05294f513cab9599ed62dce7f81c97a.gz --- gestion/lock.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/gestion/lock.py b/gestion/lock.py index e08d6798..991a735c 100755 --- a/gestion/lock.py +++ b/gestion/lock.py @@ -11,12 +11,13 @@ import os,string,time,sys, affich_tools from commands import getoutput from user_tests import getuser from fcntl import lockf, LOCK_EX, LOCK_NB, LOCK_UN -import errno +import errno, random -def wait_lock(lock_name, lock_comment='', d=None): +def wait_lock(lock_name, lock_comment='', d=None, retry=0.2): """Attend la disponibilité d'un lock en utilisant le framework Twisted. Si d est de type Deferred, on est en mode asynchrone. + retry permet de réessayer dans `retry' secondes. """ from twisted.internet import reactor, defer try: @@ -44,8 +45,9 @@ def wait_lock(lock_name, lock_comment='', d=None): if not d: # On est en mode synchrone, on va passer en asynchrone d = defer.Deferred() - # On essaie de nouveau dans 200 ms. - reactor.callLater(0.2, wait_lock, lock_name, lock_comment, d) + # On essaie de nouveau plus tard + newretry = min(retry * 2, 4) + random.random() * 0.1 * retry + reactor.callLater(retry, wait_lock, lock_name, lock_comment, d, newretry) return d def make_lock(lock_name, lock_comment='',nowait=0, quiet=False) :