私は辞書を持つクラスを持っています
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詳細はこちらをご覧ください。