1. ホーム
  2. python

[解決済み] Pythonの辞書にあるスレッドセーフについて

2022-07-19 14:59:02

質問

辞書を保持するクラスがあります。

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 ?

どのように解決するのですか?

Pythonの組み込み構造は、単一の操作に対してはスレッドセーフですが、あるステートメントが本当に複数の操作になる場所を確認するのは難しいことがあります。

あなたのコードは安全であるべきです。 覚えておいてください:ここでのロックはほとんどオーバーヘッドを追加せず、あなたに安心感を与えます。

https://web.archive.org/web/20201108091210/http://effbot.org/pyfaq/what-kinds-of-global-value-mutation-are-thread-safe.htm が詳しいです。