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

Jac*_*ack 1 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()
Run Code Online (Sandbox Code Playgroud)

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

fja*_*rri 5

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

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

另一个问题,当我将 dict 更改为另一个常规对象时,它会抛出异常为:TypeError: 'Test' object is not iterable 请问如何在 python 进程之间共享常规对象。

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