El,, manera portátil más segura posible para que cada obra hilo con datos independientes es:
import threading
tloc = threading.local()
Ahora cada hilo trabaja con un totalmente objeto independiente tloc
aunque es un nombre global. El hilo puede obtener y establecer atributos en tloc
, use tloc.__dict__
si necesita un diccionario específicamente, etc.
El almacenamiento local de subprocesos para un hilo desaparece al final del hilo; para que los subprocesos graben sus resultados finales, obtenga put
sus resultados, antes de que finalicen, en una instancia común de Queue.Queue
(que es intrínsecamente segura para subprocesos). De forma similar, los valores iniciales para los datos en los que un subproceso debe trabajarse podrían ser argumentos pasados cuando se inicia el subproceso o tomados desde un Queue
.
Otros enfoques a medias, como la esperanza de que las operaciones que parecen atómicas son atómicas, pueden funcionar para casos específicos en una versión dada y lanzamiento de Python, pero podrían romperse fácilmente por actualizaciones o puertos. No existe una razón real para arriesgar tales problemas cuando una arquitectura adecuada, limpia y segura es tan fácil de organizar, portátil, manejable y rápida.
Usted ** está ** usando CPython, ¿verdad? – voyager
@voyager: sí, estoy usando CPython. – Alex