あまり知識がなかったときに書いた Python コードの一部を整理しています。主に、Python のスレッド化についての不完全な理解に起因する複雑さの一部を解消しています。アイテムのリストをスレッドセーフにする必要があり、通常のロック方法ではなく、不変リストを介して行いたいと考えています。不変オブジェクトは、スレッド化に関して非常に特別であることを私は知っています。不完全な状態変更を取り巻くすべてのスレッド セーフの問題が単純に解消されるからです。
それで、私は尋ねます: 次のコードはスレッドセーフですか?
class ImmutableList(object):
def __init__(self):
self._list = ()
def __iter__(self):
return self._list.__iter__()
def append(self, x):
self._list = self._list + tuple([x])
毎回新しいリストが作成されるため、そうであると思います。別のスレッドがリストを反復している間にリストが更新された場合、反復の残りの部分では古いリストが引き続き使用されます。これは私には問題ありませんが、万人向けではないかもしれません。
また、これは良い考えですか?リストのサイズが小さく、リストがあまり変更されないいくつかの状況にのみこれを適用したいと思います (イベント リスナーが思い浮かびます)。