为什么多个进程在python中具有相同的对象id

时间:2015-11-20 01:22:52

标签: python

代码如下:

class T1():
    def mytest(self,obj):
        print id(obj)

if __name__=='__main__':
    obj = {'a':'b'}
    t1 = T1()
    p1 = Process(name='p1',target=t1.mytest,args=(obj))
    p1.start()
    p2 = Process(name='p2',target=t1.mytest,args=(obj))
    p2.start()

上面的代码打印出相同的id,两个进程是否共享同一个对象? 当我将dict更改为另一个常规对象时,另一个问题是它会抛出异常:TypeError: 'Test' object is not iterable
我如何在python进程之间共享常规对象。

1 个答案:

答案 0 :(得分:4)

  

上面的代码打印出相同的id,两个进程是否共享同一个对象?

不,标识符仅保证对于给定进程是唯一的。在您的情况下,两个不同进程中的两个对象碰巧具有相同的标识符,因为两个进程都执行相同的代码(这种行为无法保证,它的发生概率很高)。

  

当我将dict更改为另一个常规对象时,另一个问题是它会抛出异常:TypeError:' Test'对象不可迭代   我如何在python进程之间共享常规对象。

args需要一个可迭代的参数。 (obj)仅相当于obj,因此如果obj不是可迭代的,则会出现此错误。我想写的是(obj,),它会创建一个元组,在这种情况下,obj可以是任何对象(只要它是腌制的 - 能够,当然)。