# -*- coding:utf-8 -*-
from multiprocessing import Process
from singleton import singleton
import os
import random
@singleton
class Demo21(object):
def __init__(self):
self.name = 'Demo21'
self.rand = random.randint(1, 100)
class Demo22(object):
def __init__(self):
self.name = 'Demo22'
self.rand = random.randint(1, 100)
def create_class(cls):
this = cls()
print "Process ID# {} Class Name# {} Instance ID# {} Info# {} rand# {}".\
format(os.getpid(), this.name, this, id(this), this.rand)
if __name__ == '__main__':
pool = []
for cls in [Demo21, Demo21, Demo22, Demo22]:
p = Process(target=create_class, args=(cls,))
pool.append(p)
for p in pool:
p.start()
for p in pool:
p.join()
输出
Process ID# 1304 Class Name# Demo21 Instance ID# <__main__.Demo21 object at 0x1038ab0d0> Info# 4354388176 rand# 29
Process ID# 1305 Class Name# Demo21 Instance ID# <__main__.Demo21 object at 0x1038ab0d0> Info# 4354388176 rand# 36
Process ID# 1306 Class Name# Demo22 Instance ID# <__main__.Demo22 object at 0x1038ab0d0> Info# 4354388176 rand# 16
Process ID# 1307 Class Name# Demo22 Instance ID# <__main__.Demo22 object at 0x1038ab0d0> Info# 4354388176 rand# 10
想知道为什么他们的地址是相同的?求详细解释
http://stackoverflow.com/questions/20955683/python-multiprocessing-sharing-a-complex-object
因为id显示的并不是物理地址而是每个进程的虚拟地址,然后代码又一样,object 的 id 一样也不奇怪了。
改两句话它们的地址就不一样了:
for cls in [Demo21(), Demo21(), Demo22(), Demo22()]:
以及
this = cls
这跟进程无关,是对象和实例的问题,让我想想具体该怎么解释……