Python并发运行时只有一个对象的dictonary实例

时间:2013-02-28 18:38:18

标签: python multithreading

使用线程和队列库运行线程时,我在线程run()函数中创建了一个对象。让我们说这个班是这样的:

class Test():
    def __init__(self, dictionary={}):
        self.dict = dictionary

当我尝试在不同的线程中访问字典时,似乎Python只创建了一个字典实例。这是Thread类。我开始了其中两个:

class ThreadTest(threading.Thread):
    def run(self):
        while True:
            // interact with Queue items
            obj = Test()
            print "%s - %s" % (self.name, id(obj.dict))
            queue.task_done()

输出:

Thread-1 - 19219616
Thread-2 - 19219616

这实在令人困惑,因为Test类创建了两次,但它共享同一个字典。

在这种情况下,有没有办法创建一个新的字典实例?

1 个答案:

答案 0 :(得分:2)

默认参数仅在遇到def行时评估一次。因此,您的默认参数dictionary={}在所有实例之间共享。

改为使用dictionary=None

if dictionary is None:
    self.dict = {}
else:
    self.dict = dictionary

每次都创建一个新实例。