<p>这是因为<code>multiprocessing.Pool</code>实际上使用子进程而不是线程。
您需要在进程之间使用显式的<a href="https://docs.python.org/2/library/multiprocessing.html#synchronization-between-processes" rel="nofollow noreferrer">synchronization</a>。注意,链接上的示例,它解决了您的问题。在</p>
<pre><code>import os
import sys
from multiprocessing import Pool, Lock
lock = Lock()
def output(msg):
msg = '%s%s' % (msg, os.linesep)
with lock:
sys.stdout.write(msg)
def func(input):
output(u'pid:%d got input \"%s\"' % (os.getpid(), str(input)))
def executeFunctionInParallel(funcName, inputsList, maxParallelism):
output(u'Executing function %s on input of size %d with maximum parallelism of %d' % (
funcName.__name__, len(inputsList), maxParallelism))
parallelismPool = Pool(processes=maxParallelism)
executeBooleanResultsList = parallelismPool.map(funcName, inputsList)
parallelismPool.close()
parallelismPool.join()
output(u'Function %s executed on input of size %d with maximum parallelism of %d' % (
funcName.__name__, len(inputsList), maxParallelism))
# if all parallel executions executed well - the boolean results list should all be True
return all(executeBooleanResultsList)
if __name__ == "__main__":
inputsList=[str(i) for i in range(20)]
executeFunctionInParallel(func, inputsList, 4)
</code></pre>