Python 在多处理中传递字典进行处理

num*_*gil 5 python dictionary arguments multiprocessing

我有一个类,其中包含(大量)不同的属性,包括一些字典。当我将类的实例传递到新进程时,所有数值似乎都正确传递,但类对象中的任何字典都被清空。

这是我编写的一个简单测试来演示我的问题:

from multiprocessing import Process

class State:
    a = 0
    b = {}

def f(s, i):
    print "f:", s.a, s.b

def main():

    state = State()

    state.a = 11
    state.b['testing'] = 12

    print "Main:", state.a, state.b

    ps = []
    for i in range(1):
        p = Process(target=f, args=(state, i))
        p.start()           # Do the work
        ps.append(p)
    for p in ps:
        p.join()

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

我期望输出是

Main: 11 {'testing': 12}
f: 11 {'testing': 12}
Run Code Online (Sandbox Code Playgroud)

但我得到

Main: 11 {'testing': 12}
f: 11 {}
Run Code Online (Sandbox Code Playgroud)

num*_*gil 0

我最终通过除了状态之外还显式传递字典来解决这个问题。例如

p = Process(target=f, args=(state, i, state.b))