【发布时间】:2016-08-24 07:39:10
【问题描述】:
当管理器对象是全局变量时,multiprocessing.Manager 类有一个非常奇怪的行为。
代码 1:
import multiprocessing
from multiprocessing import Manager
manager = Manager()
list1 = manager.list(range(4))
dict1 = manager.dict({"d":1,"f":2})
def process1(list1,dict1):
print "process1"
dict1["3"] = 123
list1.append(10)
def run():
print "start"
global list1
global dict1
print "list1",list1
print "dict1",dict1
if __name__ == '__main__':
print "start"
j = multiprocessing.Process(target=process1, args=(list1,dict1))
j.start()
j.join()
run()
输出 1:
start
process1
start
list1 [0, 1, 2, 3, 10]
dict1 {'3': 123, 'd': 1, 'f': 2}
好的,也就是说全局变量̀list1和dict1已经被process1修改了。
问题是当我尝试替换 list1 或 dict1 时它不起作用!
代码 2:
import multiprocessing
from multiprocessing import Manager
manager = Manager()
list1 = manager.list(range(4))
dict1 = manager.dict({"d":1,"f":2})
def process1(list1,dict1):
print "process1"
dict1["3"] = 123
list1 = manager.list(range(100,104))
def run():
print "start"
global list1
global dict1
print "list1",list1
print "dict1",dict1
if __name__ == '__main__':
print "start"
j = multiprocessing.Process(target=process1, args=(list1,dict1))
j.start()
j.join()
run()
输出 2:
start
process1
start
list1 [0, 1, 2, 3]
dict1 {'3': 123, 'd': 1, 'f': 2}
知道为什么它返回初始列表[0, 1, 2, 3] 而不是[100, 101, 102, 103]?
【问题讨论】:
标签: python multithreading global-variables python-multiprocessing