Является ли Python list.clear() потокобезопасным?Python

Программы на Python
Anonymous
Является ли Python list.clear() потокобезопасным?

Сообщение Anonymous »

Предположим, что в Python один поток добавляет/извлекает элементы в список/

Код: Выделить всё

collections.deque
/аналогичный встроенный контейнер, в то время как другой поток время от времени очищает контейнер с помощью методаclear(). Является ли это взаимодействие потокобезопасным? Или возможно, что функцияclear() мешает параллельному методу добавления()/ операция, оставляющая список неочищенным или поврежденным?
Моя интерпретация принятого здесь ответа предполагает, что GIL должен предотвращать такое вмешательство, по крайней мере, для списков. Я прав?
В качестве продолжения, если это не потокобезопасно, я полагаю, что вместо этого мне следует использовать очередь.Queue. Но каков наилучший (т. е. самый чистый, безопасный и быстрый) способ очистить его от второго потока? См. комментарии к этому ответу, чтобы узнать об использовании (недокументированного) метода очереди.Queue().queue.clear(). Нужно ли мне использовать цикл для получения() всех элементов один за другим?

Подробнее здесь: https://stackoverflow.com/questions/788 ... hread-safe

Вернуться в «Python»