我注意到我的代码中的行为无法解释。这是代码:
import multiprocessing
from collections import deque
LOCK = multiprocessing.Lock()
data = deque(['apple', 'orange', 'melon'])
def f(*args):
with LOCK:
data.rotate()
print data[0]
pool = multiprocessing.Pool()
pool.map(f, range(4))
我希望输出为
melon
orange
apple
melon
但我得到了
melon
melon
melon
非常感谢任何想法。
答案 0 :(得分:1)
正如蒂姆·彼得斯评论的那样,问题不在于Lock
,而是deque
不会在整个流程中共享,但每个流程都有自己的副本。
multiprocessing
模块提供了一些数据结构,这些数据结构将在进程间共享,例如: multiprocessing.Queue
。请改用它。