擅长:python、mysql、java
<p>你只给出了部分代码,所以我只能看到一个潜在的问题。锁保护对<code>es_id</code>的访问没有任何好处。您必须锁定保护它们,无论它们出现在程序中的任何位置。为此,最好创建一个访问函数,例如:</p>
<pre><code>def increment_es_id():
global es_id
lock.acquire()
es_id += 1
lock.release()
</code></pre>
<p>这可以从任何线程安全地调用。在</p>
<p>在您的代码中,最好将获取/释放调用尽可能靠近它们。这里只需要保护一个变量,这样就可以将acquire/release对移到<code>es_id += 1</code>语句之前和之后。。在</p>
<p>更好的方法是在上下文管理器中使用锁(尽管在这个简单的例子中它不会有任何区别):</p>
^{pr2}$