Heim > Artikel > Backend-Entwicklung > So definieren Sie lokale Thread-Variablen in Python
Es gibt ein Konzept namens Thread-Lokalvariablen. Diese Variablen sind gemeinsam genutzte Variablen. Um die Synchronisierung aufrechtzuerhalten, führen wir eine Fesselverarbeitung durch.
Aber nachdem einige Variablen initialisiert wurden, möchten wir nur, dass sie immer in jedem Thread vorhanden sind, was einer gemeinsam genutzten Variablen innerhalb eines Threads und zwischen Threads entspricht Es ist isoliert und eine lokale Variable. Das Python-Threading-Modul stellt eine solche Klasse mit dem Namen „local“ bereit. (Empfohlenes Lernen: Python-Video-Tutorial)
Bei der Verwendung lokaler Variablen müssen Sie beispielsweise Parameter übergeben, die das Programm verarbeiten muss Kundenanwendungen: Für einen Kunden wird ein neuer Thread zur Verarbeitung geöffnet, und der Kunde verfügt über Attribute (Parameter) wie Name, Alter, Geschlecht usw. Es ist sehr umständlich, Parameter zu übergeben, wenn sie alle übergeben werden müssen. Python stellt das Modul threading.local bereit, um die Übertragung lokaler Thread-Variablen zu erleichtern. Schauen Sie sich das folgende Beispiel direkt an:
# /usr/bin/env python # coding:utf-8 import threading # Threading.local对象 ThreadLocalHelper = threading.local() lock = threading.RLock() class MyTheadEx(threading.Thread): def __init__(self, threadName, name, age, sex): super(MyTheadEx, self).__init__(name=threadName) self.__name = name self.__age = age self.__sex = sex def run(self): global ThreadLocalHelper ThreadLocalHelper.ThreadName = self.name ThreadLocalHelper.Name = self.__name ThreadLocalHelper.Age = self.__age ThreadLocalHelper.Sex = self.__sex MyTheadEx.ThreadPoc() # 线程处理函数 @staticmethod def ThreadPoc(): lock.acquire() try: print 'Thread={id}'.format(id=ThreadLocalHelper.ThreadName) print 'Name={name}'.format(name=ThreadLocalHelper.Name) print 'Age={age}'.format(age=ThreadLocalHelper.Age) print 'Sex={sex}'.format(sex=ThreadLocalHelper.Sex) print '----------' finally: lock.release() if __name__ == '__main__': Tom = {'Name': 'tom', 'Age': 20, 'Sex': 'man'} xiaohua = {'Name': 'xiaohua', 'Age': 18, 'Sex': 'woman'} Andy = {'Name': 'Andy', 'Age': 40, 'Sex': 'man'} T = (Tom, xiaohua, Andy) threads = [] for i in range(len(T)): t = MyTheadEx(threadName='id_{0}'.format(i), name=T[i]['Name'], age=T[i]['Age'], sex=T[i]['Sex']) threads.append(t) for i in range(len(threads)): threads[i].start() for i in range(len(threads)): threads[i].join() print 'All Done!!!'
Es ist ersichtlich, dass jeder Thread das threading.local-Objekt lesen und schreiben kann, ohne sich gegenseitig zu stören. Durch die sinnvolle Verwendung von threading.local kann die Codelogik erheblich vereinfacht und gleichzeitig die Datensicherheit jedes Unterthreads gewährleistet werden. Der größte Nutzen von Threading.local besteht darin, Benutzerinformationen bei HTTP-Anfragen zu binden, sodass jeder Benutzerthread problemlos auf seine eigenen Ressourcen zugreifen kann, ohne sich gegenseitig zu stören.
Weitere technische Artikel zum Thema Python finden Sie in der Spalte Python-Tutorial, um mehr darüber zu erfahren!
Das obige ist der detaillierte Inhalt vonSo definieren Sie lokale Thread-Variablen in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!