擅长:python、mysql、java
<p>明白了。脚本中的错误是,我在每次调用时都创建一个新的文件描述符:</p>
<pre><code>fcntl.flock(open('/tmp/locktest', 'r'), fcntl.LOCK_EX | fcntl.LOCK_NB)
(...)
fcntl.flock(open('/tmp/locktest', 'r'), fcntl.LOCK_EX | fcntl.LOCK_NB)
</code></pre>
<p>相反,我必须将file对象分配给一个变量,而不是尝试锁定:</p>
<pre><code>f = open('/tmp/locktest', 'r')
fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB)
(...)
fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB)
</code></pre>
<p>我也得到了我想看到的异常:<code>IOError: [Errno 11] Resource temporarily unavailable</code>。现在我必须考虑在哪些情况下使用fcntl是有意义的。</p>