Funktionen in einem Modul entsprechen statischen Methoden in einer Klasse. Das Problem der Threadsicherheit tritt auf, wenn mehrere Threads gemeinsam genutzte Daten ändern, oder sogar ein Thread diese Daten ändert, während andere sie lesen. Man vermeidet es am besten, indem man die Daten einem ONE-Modul zuweist (über Queue.Queue von anderen zugreifbar), aber wenn das nicht machbar ist, muss man auf Sperren und andere, komplexere Synchronisations-Primitive zurückgreifen.
Dies gilt unabhängig davon, ob der Zugriff auf gemeinsam genutzte Daten in Modulfunktionen, statischen Methoden oder Instanzmethoden erfolgt. Die gemeinsam genutzten Daten sind Instanzvariablen, Klassenvariablen oder globale Variablen (Scoping und Thread-Sicherheit sind im Wesentlichen disjunkt) Abgesehen davon, dass funktionslokale Daten intrinsisch threadsicher sind - kein anderer Thread wird jemals die Daten in einer Funktionsinstanz sehen, solange und solange die Funktion sie nicht über gemeinsame Container "freigibt".
Wenn Sie das Modul multiprocessing
in Pythons Standardbibliothek anstelle des Moduls threading
verwenden, müssen Sie sich möglicherweise nicht um die "Thread-Sicherheit" kümmern - im Wesentlichen, weil KEINE Daten zwischen Prozessen ausgetauscht werden ... Sie gehen aus dem Weg, um das zu ändern, z über mmap
ped-Dateien ;-).
Sie müssen Prefork MPM nicht verwenden. Sie könnten den mod_wsgi-Daemon-Modus verwenden. In diesem Fall können Sie immer noch workers MPM verwenden, da die Anzahl der vom mod_wsgi-Daemon-Modus verwendeten Threads separat gesteuert wird. Die Verwendung von prefork wäre nur für mod_python oder den eingebetteten Modus von mod_wsgi erforderlich. –