我有一堂课,有一本字典
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
。这是每个线程运行的函数:
def addOrders(restaurant_name):
#creates orders
...
OrderBook.addOrder(restaurant_name, orders)
这样安全吗,还是在致电之前必须使用锁addOrder
?
Python的内置结构对于单个操作是线程安全的,但是有时很难看到一条语句真正变成了多个操作。
您的代码应该是安全的。注意:这里的锁几乎不会增加任何开销,并且让您高枕无忧。
http://effbot.org/pyfaq/what-kinds-of-global-value-mutation-are-thread-
safe.htm
提供了更多详细信息。
问题内容: 有人说python字典是线程安全的。这是否意味着我可以或不能在字典中修改项目? 问题答案: 这两个概念完全不同。 线程安全性意味着两个线程无法同时修改同一对象,从而使系统处于不一致状态。 也就是说,在迭代字典时不能修改字典。请参阅文档。。 字典p在迭代过程中不应被突变。在字典上进行迭代时,修改键的值是安全的(自Python 2.1起),但前提是只要键的集合不变即可。
问题内容: 访问/更改字典值是否是线程安全的? 我有一个全球性的词典和多线程与IDS ,,… 。如果已知每个线程只能使用其与ID相关的值,比如说with with只能使用它,则可以在不为其分配锁的情况下访问和更改其值,可以吗? 问题答案: 假设CPython:是和否。从多个并发读/写请求不会破坏字典的意义上来说,从共享字典中获取/存储值实际上是安全的。这是由于实现保留了全局解释器锁(“ GIL”)
问题内容: 我在Python中有一个这样的字典:dict = {‘a’:1,’q’:1,’l’:2,’m’:1,’u’:1,’i’:1} 有什么方法可以保持此字典的顺序以这种方式表示。我已经阅读了几个论坛,其中大多数建议使用OrderedDict()。但正如这里解释: Python OrderedDict不保持元素顺序 以这种形式编写字典时,OrderedDict(dict)将不保留顺序。我无法以
问题内容: 除了字典,我希望这样做: 有内置函数还是应该使用循环? 问题答案: 您将需要使用循环或列表/生成器理解。如果要小写所有键和值,可以执行以下操作: 如果只想小写按键,可以执行以下操作: 生成器表达式(上面使用过)通常在构建字典时很有用;我一直都在用它们。循环理解的所有表现力,没有任何内存开销。
我找到了关于线程安全的代码,但它没有来自给出示例的人的任何解释。我想知道为什么如果我不在“count”之前设置“synchronized”变量,那么count值将是非原子的(总是=200是期望的结果)。谢谢
问题内容: 所以我应该在程序的开头运行什么以使其具有线程安全性(或在某些地方已读懂线程安全性): 然后,我应该在线程中做什么?某种锁?使用Python的线程库是否安全?还是应该在GLib,GObject或Gdk中使用某些内容?我知道那里有很多问题/答案/示例,但是它们彼此矛盾,不是针对Gtk + 3,不是针对Python,或者仅仅是不完整,甚至我认为是Python GI的官方文档(http ://