Tengo un diccionario actualizado por un hilo, y en otro hilo me gustaría iterar sobre sus valores. Normalmente utilizaría un bloqueo, pero este código es muy crítico para el rendimiento, y quiero evitar eso si es posible.¿Se puede iterar un diccionario modificado por otro hilo sin generar excepciones?
Una característica especial de mi caso es que no me importa la corrección absoluta del iterador; si pierde las entradas que se eliminaron después de que comenzó la iteración, o recoge las que se agregaron después, está bien. Solo exijo que no genere ningún tipo de excepción de 'tamaño de diccionario modificado durante la iteración'.
Dada esta restricción relajada en la corrección, ¿hay una forma eficiente de iterar el diccionario sin usar un bloqueo?
Nota: Soy consciente de que keys()
es threadsafe en Python 2.x, pero como ese comportamiento ha cambiado en 3.x, quiero evitarlo.
¿Qué pasa si 'sólo lo hacen'? –
Cuando se trata de simultaneidad, prefiero trabajar con hechos que con experimentos aleatorios. – DNS
Teniendo en cuenta los efectos del Global Interpreter Lock, tener un bloqueo alrededor de su dict podría no ser tan caro como cree (ya que sus dos hilos de ejecución no se ejecutarán al mismo tiempo). – NPE