我使用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