Python的字典中的线程安全

我有一个掌握字典的课程

class OrderBook: orders = {'Restaurant1': None, 'Restaurant2': None, 'Restaurant3': None, 'Restaurant4': None} @staticmethod def addOrder(restaurant_name, orders): OrderBook.orders[restaurant_name] = orders 

我正在运行4个线程(每个餐厅一个)调用方法OrderBook.addOrder 。 这里是每个线程运行的function:

 def addOrders(restaurant_name): #creates orders ... OrderBook.addOrder(restaurant_name, orders) 

这是安全的,还是我必须在调用addOrder之前使用锁?

Python的内置结构对于单个操作是线程安全的,但有时很难看出语句真正成为多个操作的地方。

你的代码应该是安全的。 请记住:这里的locking将增加几乎没有开销,并会给你安心。

http://effbot.org/pyfaq/what-kinds-of-global-value-mutation-are-thread-safe.htm有更多的细节。

是的,内置types本质上是线程安全的: http : //docs.python.org/glossary.html#term-global-interpreterlock

这通过使对象模型( 包括像dict这样的关键内置types )隐式地避免并发访问而简化了CPython实现。