Мені потрібна черга, в яку можна покласти кілька потоків, і з яких можна прочитати кілька потоків.
У Python є щонайменше два класи черг, Queue.Queue і collection.deque, причому перший, здавалося б, використовує останній внутрішньо. Обидва заявляють, що захищені потоками в документації.
Однак у документах черги також зазначено:
collection.deque - це альтернативна реалізація необмежених черг з операціями швидкого атомного додавання () та popleft (), які не потребують блокування.
Я думаю, я не зовсім розумію: чи означає це, що врешті-решт деке не є повністю безпечним для потоків?
Якщо це так, я, можливо, не повністю розумію різницю між двома класами. Я бачу, що черга додає функцію блокування. З іншого боку, він втрачає деякі функції, такі як підтримка оператора.
Доступ до внутрішнього об'єкта deque безпосередньо, є
x у черзі (). deque
нитка-безпечна?
Крім того, чому черга використовує мьютекс для своїх операцій, коли deque вже захищений потоками?
deque
час повторення навіть у тій самій потоці. Єдина причина, з якої ви не можете отримати цю помилку, Queue
- це те, що Queue
вона не підтримує ітерацію.
RuntimeError: deque mutated during iteration
це те, що ви можете отримати, - це використання спільногоdeque
між декількома потоками та відсутність блокування ...