擅长:python、mysql、java
<p>需要使用<code>global</code>语句来通知Python您希望将一个变量(<code>var</code>)作为全局的、通用的可修改名称而不是每个函数的局部变量来处理。如果您将<code>var = 0</code>定义移到函数之上,情况会稍微好一些:</p>
<p>但作为<a href="https://stackoverflow.com/a/31550624/240490">Marcin says</a>,“上帝的爱,不要这样做。”绕开几个<code>NameError</code>并不是这里的关键问题。在许多程序中,即使没有并发,全局变量也很难管理。在同时发生的环境中,它们会变成噩梦。它们的行为在线程化和多处理并发性(这两个都是你导入的,尽管你现在似乎在使用线程)和跨不同的平台(例如,Windows的工作方式与Unix/Linux/macosx不同)。在</p>
<p>数组引用起作用的原因,至少在某种程度上是这样的:全局结构(例如字典、列表、NumPy数组)的内部内容很容易被修改,即使整个结构不是这样。其中大部分与Python如何管理名称(粗略地说,“变量”)有关,而不是与并发性有关。但是在一个并发的环境中,对这些全局结构的修改将很快变得危险(读起来:令人困惑、不可靠、不易复制)。在</p>
<p>所以,长话短说,在我们开始讨论<a href="https://en.wikipedia.org/wiki/Race_condition" rel="nofollow noreferrer">race condition</a>你的线程所面对的问题之前,这里很容易有三到四个重叠的问题。在</p>
<p>如果你的阅读器(<code>child2</code>)比你的编写器(<code>child1</code>)有更长的睡眠时间,你也许可以得到基本上正常工作的代码。但是要注意:除了一个玩具示例,您需要一个真正的并发感知结构(例如<a href="https://docs.python.org/2/library/queue.html" rel="nofollow noreferrer">a queue</a>)。在</p>