Maison > Article > développement back-end > Comment définir des variables locales de thread en Python
Il existe un concept appelé variables locales de thread. Généralement, nous verrouillons les variables globales dans les multi-threads. Ces variables sont des variables partagées. Afin de maintenir la synchronisation, nous effectuerons un traitement de manille.
Mais une fois certaines variables initialisées, nous voulons simplement qu'elles existent toujours dans chaque thread, ce qui équivaut à une variable partagée au sein d'un thread, et entre les threads Elle est isolée et constitue une variable locale. Le module de threading python fournit une telle classe, appelée local. (Apprentissage recommandé : Tutoriel vidéo Python)
Lors de l'utilisation de variables locales, vous devez transmettre des paramètres. Par exemple, il existe un exemple où le programme doit traiter. applications client. Pour un client, un nouveau fil de discussion est ouvert pour le traitement et le client a des attributs (paramètres) tels que le nom, l'âge, le sexe, etc. Il est très fastidieux de transmettre des paramètres s'ils doivent tous être transmis. Python fournit le module threading.local pour faciliter le transfert des variables locales du thread. Regardez directement l'exemple suivant :
# /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!!!'
On peut voir que chaque thread peut lire et écrire l'objet threading.local sans interférer les uns avec les autres. Une utilisation raisonnable de threading.local peut grandement simplifier la logique du code tout en garantissant la sécurité des données de chaque sous-thread. La plus grande utilisation de Threading.local est de lier les informations utilisateur lors des requêtes HTTP, afin que chaque thread utilisateur puisse facilement accéder à ses propres ressources sans interférer les uns avec les autres.
Pour plus d'articles techniques liés à Python, veuillez visiter la colonne Tutoriel Python pour apprendre !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!