Я использую python 2.7
Я хочу создать оберточную функцию вокруг fcntl.flock(), которая будет истекать через заданный интервал:
wrapper_function(timeout):
Я попытался вызвать другой поток и использовать thread.join(timeout), но кажется, что fcntl.flock() продолжает блокировать:
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
Я рассмотрел решения для прекращения потоков, наиболее популярным решением является подклассификация threading.thread и добавление функции для создания исключения в потоке. Тем не менее, я наткнулся на ссылку в которой говорится, что этот метод не будет работать с собственными вызовами, и я уверен, что fcntl.flock() вызывает собственную функцию. Предложения?
Контекст: я использую блокировку файлов для создания одного экземпляра приложения, но я не хочу, чтобы второй экземпляр приложения сидел и зависал, пока первый экземпляр не завершится.