当前位置: 首页 > 面试题库 >

Python字典中的线程安全

齐才艺
2023-03-14
问题内容

我有一堂课,有一本字典

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 ://