首页 > 解决方案 > Python 多处理的管理器列表没有锁?

问题描述

我使用多处理的管理器创建一个列表以在两个进程之间共享。他们只需将 1 加 20 次。最后发现最终结果不是40。看来manager的list不是process-safe?代码如下:

from multiprocessing import Process, Manager

def f(l):
    for i in range(20):
        l[0] += 1

if __name__ == '__main__':
    manager = Manager()
    l = manager.list([0] * 10)
    p1 = Process(target=f, args=(l,))
    p2 = Process(target=f, args=(l,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

    print (l)

结果是

[26, 0, 0, 0, 0, 0, 0, 0, 0, 0]

如何以流程安全的方式共享列表?

标签: pythonmultiprocessingthread-safety

解决方案


推荐阅读