J'utilise python 2.7
Je veux créer une fonction enveloppante autour de fcntl.flock() qui se termine après un intervalle défini :
wrapper_function(timeout):
J'ai essayé d'appeler sur un autre thread et d'utiliser thread.join(timeout) mais il semble que fcntl.flock() continue de bloquer :
def GetLock(self, timeout):
"""Returns true if lock is aquired, false if lock is already in use"""
self.__lock_file = open('proc_lock', 'w')
def GetLockOrTimeOut():
print 'ProcessLock: Acquiring Lock'
fcntl.flock(self.__lock_file.fileno(), fcntl.LOCK_EX)
print 'ProcessLock: Lock Acquired'
thread = threading.Thread(target=GetLockOrTimeOut)
thread.start()
thread.join(timeout)
if thread.isAlive():
print 'GetLock timed out'
return False
else:
return True
J'ai cherché des solutions pour mettre fin aux threads, la solution la plus populaire semble être de sous-classer threading.thread et d'ajouter une fonction pour lever une exception dans le thread. Cependant, je suis tombé sur une lien qui dit que cette méthode ne fonctionnera pas avec les appels natifs, alors que je suis presque sûr que fcntl.flock() appelle une fonction native. Des suggestions ?
Contexte : J'utilise un verrou de fichier pour créer une application à instance unique, mais je ne veux pas qu'une deuxième instance de l'application reste en suspens jusqu'à ce que la première instance se termine.