相关疑难解决方法(0)

LOCK_NB在羊群中意味着什么?

LOCK_NBPHP flock命令中的含义是什么?

php linux

13
推荐指数
1
解决办法
1万
查看次数

fcntl.flock - 如何实现超时?

我正在使用python 2.7

我想创建一个围绕fcntl.flock()的包装函数,它将在设置的间隔后超时:

wrapper_function(timeout):
Run Code Online (Sandbox Code Playgroud)

我试过调用另一个线程并使用thread.join(超时),但似乎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
Run Code Online (Sandbox Code Playgroud)

我已经研究了终止线程的解决方案,最流行的解决方案似乎是对threading.thread进行子类化并添加一个功能来引发线程中的异常.但是,我遇到一个链接,说这个方法不适用于本机调用,我很确定fcntl.flock()正在调用本机函数.建议?

上下文:我使用文件锁来创建单个实例应用程序,但我不希望应用程序的第二个实例坐下来并挂起,直到第一个实例终止.

python multithreading

11
推荐指数
3
解决办法
7725
查看次数

标签 统计

linux ×1

multithreading ×1

php ×1

python ×1