使用flock时锁文件是否需要全局

时间:2016-08-16 14:54:36

标签: python bash cron

我正在为单个实例设置cron作业。 下面的锁是否需要全局?我相信,为了在程序结束之前它保持在范围内。或者至少在try / except块之外。另外,Python的返回值应为正值?似乎-2在echo $上返回254?在bash中。

import time, fcntl, sys

LOCK_FILE = '/tmp/test_flock.lock'
lock = None    
def do_wait():
    print ('waiting N sec')
    time.sleep(3)

def main(argv=None):
    try:
        global lock        
        lock = open(LOCK_FILE,'w')
        fcntl.flock(lock, fcntl.LOCK_EX | fcntl.LOCK_NB)
        print ("got flock")
    except IOError as err:
        print ("Could not obtain lock file")
        return -2

    if argv is None:
        argv = sys.argv

    try:
        print ('entering main')
        print ('waiting')
#        raise ValueError("Error raised")
        do_wait()
        print ('done')
    except Exception as err:
        print ("Exception in main")
        return -1

if __name__ == '__main__':
    sys.exit(main())

1 个答案:

答案 0 :(得分:0)

似乎-2在echo $上返回254?在bash。

Bash将-2解释为254可能是由于它如何处理负数,我相信是通过返回8位无符号整数。

Soln:使用正整数> 0但是< 256. Bash将看到返回码> 0为错误。

下面的锁是否需要全局?我相信,为了在程序结束之前它保持在范围内。

Ans:如果锁定文件没有其他冲突,那么我认为全局锁定没问题。