Pythonの辞書におけるスレッドセーフティ 質問する

Pythonの辞書におけるスレッドセーフティ 質問する

私は辞書を持つクラスを持っています

class OrderBook:
    orders = {'Restaurant1': None,
              'Restaurant2': None,
              'Restaurant3': None,
              'Restaurant4': None}

    @staticmethod
    def addOrder(restaurant_name, orders):
        OrderBook.orders[restaurant_name] = orders

そして、メソッドを呼び出す 4 つのスレッド (レストランごとに 1 つ) を実行していますOrderBook.addOrder。各スレッドによって実行される関数は次のとおりです。

def addOrders(restaurant_name):

    #creates orders
    ...

    OrderBook.addOrder(restaurant_name, orders)

これは安全ですか、それとも電話する前にロックを使用する必要がありますかaddOrder?

ベストアンサー1

Python の組み込み構造は単一の操作に対してはスレッドセーフですが、ステートメントが実際に複数の操作になる場所がわかりにくい場合があります。

コードは安全でなければなりません。ここでのロックはオーバーヘッドをほとんど追加しないので、安心できます。

https://web.archive.org/web/20201108091210/http://effbot.org/pyfaq/what-kinds-of-global-value-mutation-are-thread-safe.htm詳細はこちらをご覧ください。

おすすめ記事