擅长:python、mysql、java
<p>因为<code>deposit</code>和<code>withdraw</code>在其他进程中运行。在他们看来,该进程不是<code>__main__</code>,因此<code>if</code>语句没有执行,并且<code>lck</code>没有定义</p>
<p>试运行</p>
<pre><code>import os
import multiprocessing
def deposit(balance):
print(os.getpid(),__name__)
def withdraw(balance):
print(os.getpid(),__name__)
if __name__ == '__main__':
print(os.getpid(), __name__)
balance = multiprocessing.Value('i', 200)
lck = multiprocessing.Lock()
d = multiprocessing.Process(target=deposit, args=(balance,))
w = multiprocessing.Process(target=withdraw, args=(balance,))
d.start()
w.start()
d.join()
w.join()
</code></pre>
<p>在我的例子中,它显示了</p>
<pre><code>19604 __main__
33320 __mp_main__
45584 __mp_main__
</code></pre>
<p>如果你把<code>lck = multiprocessing.Lock()</code>放在<code>if</code>之外,你的代码就可以运行。但我肯定这不是你想要的</p>
<p>在本例中,您应该使用<code>threading</code>而不是<code>multiprocess</code>,并了解多线程和多进程之间的区别</p>