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