首页 > Python不同进程的类的实例id为什么一样的?

Python不同进程的类的实例id为什么一样的?

# -*- 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

这跟进程无关,是对象和实例的问题,让我想想具体该怎么解释……

【热门文章】
【热门文章】