代码如下:
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 进程之间共享常规对象。
上面的代码打印出相同的id,两个进程共享同一个对象吗?
不,标识符只能保证对于给定的进程是唯一的。在您的情况下,两个不同进程中的两个对象碰巧具有相同的标识符,因为两个进程都执行相同的代码(不能保证这种行为,它发生的概率很高)。
另一个问题,当我将 dict 更改为另一个常规对象时,它会抛出异常为:TypeError: 'Test' object is not iterable 请问如何在 python 进程之间共享常规对象。
args需要一个可迭代的参数。(obj)等效于 just obj,因此如果obj不是可迭代的,则会出现此错误。我猜你想写的是(obj,), 它将创建一个元组,在这种情况下obj可以是任何对象(当然,只要它是可腌制的)。