【发布时间】:2016-12-01 16:44:37
【问题描述】:
我有一个初始化各种原始和复杂数据类型和对象的 init 方法。在 multiprocessing.Process 生成的每个进程中,我打印了 init() 方法中的一个变量和一个初始化对象的地址。 我得到了变量的不同实例,但对象的地址保持不变。那么,想知道在 multiprocessing.Process 调用期间父类成员究竟发生了什么?
def __init__(self):
self.count = 0
self.db = pymongo.MongoClient()
def consumerManager(self):
for i in range(4):
p = multiprocessing.Process(target = self.consumer, args = (i,))
def consumer(self, i):
while(1):
time.sleep(i)
self.count += 1
print self.count
print os.getpid()
print id(self.db)
如果它正在对对象进行深度复制,那么id(self.db) 应该在每个进程中打印不同的 id,这不会发生。这是怎么做到的?
【问题讨论】:
-
这是为 linux 设计的
-
我在 init() 中初始化了一个 dict {'a':'b'} ,然后在每个进程中修改了 dict 后打印了 id,但所有进程仍然具有相同的 id 值他们持有特定于该流程的数据
-
你试过用
Pool代替吗? -
不,但两者的行为应该相同,对吧?
标签: python linux multiprocessing