Es este deque hilo seguro en python?

No puedo decidir si el siguiente deque es seguro para subprocesos.
En resumen, he creado una clase con un deque que muestra su contenido cada 1 segundo en un nuevo hilo (para que no detenga el progtwig principal durante la impresión).
El deque se llena desde el hilo principal, por lo que básicamente DEBE haber una posibilidad de colisión.
SIN EMBARGO, el deque se llena utilizando un método de clase, por lo que esencialmente se accede desde la propia instancia, por lo tanto, desde el mismo hilo.
Aquí está el código simplificado:

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) 

Entonces, aunque la adición y eliminación de elementos de la cola se realiza dentro de la instancia, ¿existe algún riesgo debido a que se llame a la función de adición desde fuera de la instancia?

EDITAR:
Como necesito modificar elementos en mi deque, tuve que usar Deque. Lo que hago es: roatate () hacia el elemento dado, sácalo, modifícalo, empújalo nuevamente y gíralo () de nuevo a su posición original.
A menos que encuentre una manera de implementar elementos de modificación en una cola, tendré que atenerme a Deque

Deque es seguro para subprocesos ( http://docs.python.org/library/collections.html#deque-objects ) para adjuntar y hacer estallar desde lados opuestos. Debajo de aquí , los documentos solo mencionan que append () y popleft () son seguros para subprocesos.

Hay una implementación segura de subprocesos de la propia Cola. Así que deberías usarlo a menos que tengas algunos requisitos extraños.

Para obtener información, hay un ticket de Python al que se hace referencia para la seguridad de subprocesos de deque ( https://bugs.python.org/issue15329 ).

El título “aclara qué métodos de deque son seguros para subprocesos”, la línea de fondo es:

Las operaciones appque (), appendleft (), pop (), popleft () y len (d) de deque son seguras para subprocesos en CPython. Los métodos adjuntos tienen una DECREF al final (para los casos donde se ha establecido maxlen), pero esto sucede después de que se hayan realizado todas las actualizaciones de la estructura y se hayan restaurado los invariantes, por lo que está bien tratar estas operaciones como atómicas.

De todos modos, si no está seguro al 100% y prefiere la confiabilidad sobre el rendimiento, simplemente coloque un locking similar para print self.q.popleft() y self.q.append(val) 😉

El módulo Queue podría ser útil para usted: http://docs.python.org/library/queue.html