Maison  >  Article  >  développement back-end  >  Comment définir des variables locales de thread en Python

Comment définir des variables locales de thread en Python

(*-*)浩
(*-*)浩original
2019-07-04 13:54:332966parcourir

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.

Comment définir des variables locales de thread en Python

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn