najlepsze, najbezpieczniejsze, przenośny sposób, aby każda praca wątek z niezależnym danych jest:
import threading
tloc = threading.local()
Teraz każdy wątek pracuje z całkowicie niezależny obiekt tloc
, mimo że jest to nazwa globalna. Wątek może uzyskać i ustawić atrybuty na tloc
, należy użyć tloc.__dict__
, jeśli specjalnie potrzebuje słownika itp.
Lokalne przechowywanie wątków dla wątku znika na końcu wątku; aby wątki zapisywały swoje końcowe wyniki, mają ich wyniki, zanim zakończą, do wspólnej instancji Queue.Queue
(która jest wewnętrznie bezpieczna dla wątków). Podobnie, początkowe wartości danych, dla których wątek ma pracować, mogą być argumentami przekazanymi, gdy wątek jest uruchamiany, lub mogą być pobrane z Queue
.
Inne półpieczone podejścia, takie jak nadzieja, że operacje wyglądające na atomowe rzeczywiście są atomowe, mogą zadziałać w konkretnych przypadkach w danej wersji i wydaniu Pythona, ale mogą łatwo zostać zerwane przez uaktualnienia lub porty. Nie ma prawdziwego powodu, aby ryzykować takie problemy, gdy właściwa, czysta i bezpieczna architektura jest tak łatwa do zorganizowania, przenośna, poręczna i szybka.
Jesteś ** używają CPython, prawda? – voyager
@voyager: tak, używam CPython. – Alex