Я не могу решить, является ли следующий deque потокобезопасным.
Короче говоря, я создал класс с deque, который отображает его содержимое каждые 1 секунду в новом потоке (чтобы он не останавливал основную программу во время печати).
Дек заполняется из основного потока, поэтому в принципе ДОЛЖНА быть вероятность столкновения.
ОДНАКО, deque заполняется с помощью метода класса, так что по сути к нему обращаются из самого экземпляра, следовательно, из того же потока.
Вот упрощенный код:
import threading
import time
from collections import deque
class MyQueue(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.q = deque()
self.start()
def run(self):
# pop out queue items every 1 sec
# (please ignore empty deque for now)
while True:
print self.q.popleft()
time.sleep(1)
def add_to_q(self, val):
# this function is called from outside
self.q.append(val)
# main
# fill the queue with values
qu = MyQueue()
for i in range(1:100):
qu.add_to_q(i)
Итак, хотя добавление и удаление элементов из очереди происходит внутри экземпляра, существует ли риск из-за того, что функция добавления вызывается извне экземпляра?
EDIT:
Так как мне нужно изменить предметы в моем deque, я должен был использовать Deque. Что я делаю, так это: roatate () для данного элемента, вытащить его, изменить, задвинуть обратно и повернуть () обратно в исходное положение.
Если я не найду способ реализовать изменения в очереди, мне придется придерживаться Deque