Является ли эта двухсторонняя очередь потокобезопасной в python?

Я не могу решить, является ли следующая двухсторонняя очередь потокобезопасный.
Короче говоря, я создал класс с двухсторонней очереди, которая отображает его содержимое каждую секунду в новом потоке (чтобы не приостанавливать выполнение основной программы во время печати).
Двусторонняя очередь заполняется из основного потока, поэтому в принципе ДОЛЖНА быть вероятность столкновения.
ОДНАКО, двухсторонняя очередь заполняется с использованием метода класса, поэтому, по сути, доступ к ней осуществляется из самого экземпляра, то есть из того же потока.
Вот упрощенный код:

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)

Итак, хотя добавление и удаление элементов из очереди происходит внутри экземпляра, существует ли риск из-за того, что функция добавления вызывается извне экземпляра?

РЕДАКТИРОВАТЬ:
Поскольку мне нужно изменить элементы в моей двухсторонней очереди, мне пришлось использовать Deque. Что я делаю: roatate () к заданному элементу, вытаскиваю его, изменяю, вставляю обратно и поворачиваю () обратно в исходное положение.
Если я не найду способ реализовать изменение элементов в очереди, мне придется придерживаться Deque

11
задан user1102018 18 December 2011 в 19:36
поделиться