我有一堂课,有一本字典
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。这是每个线程运行的函数:
OrderBook.addOrder
def addOrders(restaurant_name): #creates orders ... OrderBook.addOrder(restaurant_name, orders)
这样安全吗,还是在致电之前必须使用锁addOrder?
addOrder
Python的内置结构对于单个操作是线程安全的,但是有时很难看到一条语句真正变成了多个操作。
您的代码应该是安全的。注意:这里的锁几乎不会增加任何开销,并且让您高枕无忧。
http://effbot.org/pyfaq/what-kinds-of-global-value-mutation-are-thread- safe.htm 提供了更多详细信息。