Backoff exponentiel pour tenter de robtenir le lock.
darcs-hash:20050322081728-d1718-a0c77f2ee05294f513cab9599ed62dce7f81c97a.gz
This commit is contained in:
parent
05863023ea
commit
d928641f7a
1 changed files with 6 additions and 4 deletions
|
@ -11,12 +11,13 @@ import os,string,time,sys, affich_tools
|
||||||
from commands import getoutput
|
from commands import getoutput
|
||||||
from user_tests import getuser
|
from user_tests import getuser
|
||||||
from fcntl import lockf, LOCK_EX, LOCK_NB, LOCK_UN
|
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.
|
"""Attend la disponibilité d'un lock en utilisant le framework Twisted.
|
||||||
|
|
||||||
Si d est de type Deferred, on est en mode asynchrone.
|
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
|
from twisted.internet import reactor, defer
|
||||||
try:
|
try:
|
||||||
|
@ -44,8 +45,9 @@ def wait_lock(lock_name, lock_comment='', d=None):
|
||||||
if not d:
|
if not d:
|
||||||
# On est en mode synchrone, on va passer en asynchrone
|
# On est en mode synchrone, on va passer en asynchrone
|
||||||
d = defer.Deferred()
|
d = defer.Deferred()
|
||||||
# On essaie de nouveau dans 200 ms.
|
# On essaie de nouveau plus tard
|
||||||
reactor.callLater(0.2, wait_lock, lock_name, lock_comment, d)
|
newretry = min(retry * 2, 4) + random.random() * 0.1 * retry
|
||||||
|
reactor.callLater(retry, wait_lock, lock_name, lock_comment, d, newretry)
|
||||||
return d
|
return d
|
||||||
|
|
||||||
def make_lock(lock_name, lock_comment='',nowait=0, quiet=False) :
|
def make_lock(lock_name, lock_comment='',nowait=0, quiet=False) :
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue