在基于 Debian 的操作系统(Ubuntu、Debian Squeeze)上,我使用 Python(2.7、3.2)fcntl 来锁定文件。据我了解,fnctl.flock 以某种方式锁定文件,如果另一个客户端想要锁定同一个文件,则会引发异常。
我构建了一个小例子,我希望会抛出一个异常,因为我首先锁定了文件,然后,紧接着,我再次尝试锁定它:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import fcntl
fcntl.flock(open('/tmp/locktest', 'r'), fcntl.LOCK_EX)
try:
fcntl.flock(open('/tmp/locktest', 'r'), fcntl.LOCK_EX | fcntl.LOCK_NB)
except IOError:
print("can't immediately write-lock the file ($!), blocking ...")
else:
print("No error")
但是该示例仅打印“无错误”。
如果我将此代码拆分为同时运行的两个客户端(一个锁定然后等待,另一个在第一个锁定已经激活后尝试锁定),我会得到相同的行为 - 完全没有效果。
这种行为的解释是什么?
编辑:
根据 nightcracker 的要求进行更改,此版本也打印“无错误”,尽管我不希望这样:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import fcntl
import time
fcntl.flock(open('/tmp/locktest', 'w'), fcntl.LOCK_EX | fcntl.LOCK_NB)
try:
fcntl.flock(open('/tmp/locktest', 'w'), fcntl.LOCK_EX | fcntl.LOCK_NB)
except IOError:
print("can't immediately write-lock the file ($!), blocking ...")
else:
print("No error")