-1

threading ライブラリと Queue ライブラリを使用してスレッドを実行する場合、スレッドの run() 関数でオブジェクトを作成しています。クラスが次のように開始するとしましょう。

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

別のスレッドで辞書にアクセスしようとすると、Python が辞書のインスタンスを 1 つだけ作成しているように見えます。これがスレッドクラスです。私はこれらのうちの2つを始めました:

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 クラスが 2 回作成されているため、これは非常に紛らわしいですが、同じ辞書を共有しています。

この場合、辞書の新しいインスタンスを作成する方法はありますか?

4

1 に答える 1

2

デフォルトの引数は、行が検出されたときに一度だけ評価されdefます。したがって、デフォルトの引数dictionary={}はすべてのインスタンスで共有されます。

dictionary=None代わりに使用し、

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

毎回新しいインスタンスを作成します。

于 2013-02-28T18:40:11.827 に答える