Python 3.9: Is read only Dictionary thread-safe [duplicate]
I have a class which holds a dictionary
class OrderBook:
orders = {'Restaurant1': None,
'Restaurant2': None,
'Restaurant3': None,
'Restaurant4': None}
@staticmethod
def addOrder(restaurant_name, orders):
OrderBook.orders[restaurant_name] = orders
And I am running 4 threads (one for each restaurant) that call the method OrderBook.addOrder
. Here is the function ran by each thread:
def addOrders(restaurant_name):
#creates orders
...
OrderBook.addOrder(restaurant_name, orders)
Is this safe, or do I have to use a lock before calling addOrder
?
Solution 1:
Python's built-in structures are thread-safe for single operations, but it can sometimes be hard to see where a statement really becomes multiple operations.
Your code should be safe. Keep in mind: a lock here will add almost no overhead, and will give you peace of mind.
https://web.archive.org/web/20201108091210/http://effbot.org/pyfaq/what-kinds-of-global-value-mutation-are-thread-safe.htm has more details.
Solution 2:
Yes, built-in types are inherently thread-safe: http://docs.python.org/glossary.html#term-global-interpreter-lock
This simplifies the CPython implementation by making the object model (including critical built-in types such as dict) implicitly safe against concurrent access.