我使用Python 2.7fcntl.flock - 如何实现超时?
我想创建一个围绕fcntl.flock)的包装功能(设定的间隔后就会超时:
wrapper_function(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并添加功能提升线程中的异常。然而,我碰到一个link,说这种方法不适用于本地调用,我很确定fcntl.flock()调用本地函数。建议?
上下文:我正在使用文件锁来创建单个实例应用程序,但我不希望应用程序的第二个实例在第一个实例终止之前呆坐并挂起。
+1,这是正确的做法。这也是shell实用程序['flock(1)'](http://linux.die.net/man/1/flock)的工作原理(源代码可用[ftp://ftp.kernel.org/pub /linux/utils/util-linux-ng/](ftp://ftp.kernel.org/pub/linux/utils/util-linux-ng/)) – 2011-03-10 04:37:59
同意了,这是一个更好的方法。 – 2011-03-10 05:07:10
当fcntl.flock不一定被主线程调用时,有没有办法把它关闭? – UsAaR33 2012-01-26 03:34:07