Python多处理锁定奇怪的行为

时间:2016-09-23 03:48:47

标签: python multiprocessing python-multiprocessing

我注意到我的代码中的行为无法解释。这是代码:

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

非常感谢任何想法。

1 个答案:

答案 0 :(得分:1)

正如蒂姆·彼得斯评论的那样,问题不在于Lock,而是deque不会在整个流程中共享,但每个流程都有自己的副本。

multiprocessing模块提供了一些数据结构,这些数据结构将在进程间共享,例如: multiprocessing.Queue。请改用它。