-1

使用 threading 和 Queue 库运行线程时,我在线程 run() 函数中创建一个对象。假设课程是这样启动的:

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

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

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 类被创建了两次,但它共享同一个字典。

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

4

1 回答 1

2

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

改为使用dictionary=None,并且

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

每次创建一个新实例。

于 2013-02-28T18:40:11.827 回答