Backoff exponentiel pour tenter de robtenir le lock.

darcs-hash:20050322081728-d1718-a0c77f2ee05294f513cab9599ed62dce7f81c97a.gz
This commit is contained in:
bernat 2005-03-22 09:17:28 +01:00
parent 05863023ea
commit d928641f7a

View file

@ -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) :