Lock bloquant avec twisted
darcs-hash:20041205173658-d1718-5d474a458f946e96b7f2e3513a8b1ff6cbb0dd3f.gz
This commit is contained in:
parent
e91111b425
commit
a4c0d7975d
1 changed files with 23 additions and 0 deletions
|
@ -13,6 +13,29 @@ 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
|
||||||
|
|
||||||
|
def wait_lock(lock_name, lock_comment='', d=None):
|
||||||
|
"""Attend la disponibilité d'un lock en utilisant le framework Twisted.
|
||||||
|
|
||||||
|
Si d est de type Deferred, on est en mode asynchrone.
|
||||||
|
"""
|
||||||
|
from twisted.internet import reactor, defer
|
||||||
|
try:
|
||||||
|
make_lock(lock_name, lock_comment, quiet=True)
|
||||||
|
# On a le lock
|
||||||
|
if not d:
|
||||||
|
# On est en mode synchrone
|
||||||
|
return defer.succeed(None)
|
||||||
|
# On appelle le callback car on est en mode asynchrone
|
||||||
|
d.callback()
|
||||||
|
except AssertionError:
|
||||||
|
# On a pas le lock
|
||||||
|
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)
|
||||||
|
return d
|
||||||
|
|
||||||
def make_lock(lock_name, lock_comment='',nowait=1, quiet=False) :
|
def make_lock(lock_name, lock_comment='',nowait=1, quiet=False) :
|
||||||
""" Création d'un lock
|
""" Création d'un lock
|
||||||
si nowait=1 fait un sys.exit(254) quand un ancien lock actif est rencontré
|
si nowait=1 fait un sys.exit(254) quand un ancien lock actif est rencontré
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue