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之前使用锁?

2 Solutions collect form web for “Python的字典中的线程安全”

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

  • Python在列表中search
  • 如何在pytest运行过程中看到正常的打印输出?
  • 嵌套类的范围?
  • 列表和元组有什么区别?
  • 在没有任何参数的情况下调用脚本时,用python argparse显示帮助信息
  • Python:正在使用“..%(var)s ..”%locals()是一个好习惯吗?
  • 使matplotlib从Python的pandas中的数据框分散绘图
  • 如何在Paramiko的单个会话中执行多个命令? (python)
  • Python - 在pandas中查找带有NaN的行的整数索引
  • 在Python中构build一个最小的插件体系结构
  • numpy.float128的内部精度是多less?