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实现。