Kramer Li
Kramer Li

Reputation: 2476

Why dict not being updated in python multiprocessing?

Please check below code.

I initialized a dict and send it to a function f. I checked the address of return_dict. It is not changing inside the process. So I thought the dict should be updated

But it is not updated, so why?

from multiprocessing import Process

return_dict = dict({})
print id(return_dict)


def f(value, return_dict):
    return_dict['value'] = value
    print return_dict


p = Process(target=f, args=(100, return_dict))
p.start()
p.join()
print return_dict

Upvotes: 3

Views: 645

Answers (1)

Hannu
Hannu

Reputation: 12205

Your Process() creates another process. It inherits objects as they are from your parent process when the child process is spawned, but modifications to these objects only modify the objects in child process memory and none of these changes are visible to parent.

You can overcome this by using Manager():

from multiprocessing import Process, Manager

def f(value, return_dict):
    return_dict['value'] = value
    print return_dict

d = Manager().dict()    
p = Process(target=f, args=(100, d))
p.start()
p.join()
print d

Upvotes: 5

Related Questions