Безопасность потоков в словаре 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 . Вот функция, выполняемая каждым потоком:

 def addOrders(restaurant_name): #creates orders ... OrderBook.addOrder(restaurant_name, orders) 

Это безопасно, или мне нужно использовать блокировку перед вызовом addOrder ?

  • Python: Как проверить, открыт ли сетевой порт на linux?
  • Может ли кто-нибудь объяснить, почему эта сортировка не будет работать?
  • Как войти в Microsoft Live через Python
  • Двойная двоичная матрица - получите строки и столбцы элементов True
  • Numpy: Как разбить / разбить набор данных (массив) на учебные и тестовые наборы данных для, например, перекрестной проверки?
  • Проверить строку для подстроки?
  • Панды: ввод строк четного числа лет
  • Как преобразовать строку из CP-1251 в UTF-8?
  • 2 Solutions collect form web for “Безопасность потоков в словаре Python”

    Встроенные структуры Python являются потокобезопасными для отдельных операций, но иногда бывает трудно увидеть, где оператор действительно становится несколькими операциями.

    Ваш код должен быть безопасным. Имейте в виду: замок здесь добавит почти никаких накладных расходов и даст вам душевное спокойствие.

    http://effbot.org/pyfaq/what-kinds-of-global-value-mutation-are-thread-safe.htm имеет более подробную информацию.

    Да, встроенные типы по сути являются потокобезопасными: http://docs.python.org/glossary.html#term-global-interpreter -lock

    Это упрощает реализацию CPython, делая объектную модель ( включая критические встроенные типы, такие как dict ), неявно защищенной от одновременного доступа.

    Python - лучший язык программирования в мире.