스레드 로컬 변수라는 개념이 있습니다. 일반적으로 멀티 스레드에서는 전역 변수를 잠급니다. 이 변수는 공유 변수입니다. 각 스레드는 동기화를 유지하기 위해 변수를 읽고 쓸 수 있습니다. .
하지만 일부 변수가 초기화된 후에는 해당 변수가 각 스레드에 항상 존재하기를 원합니다. 이는 스레드 내에서 공유하는 것과 같습니다. . 스레드 간에 격리된 변수는 지역 변수입니다. Python 스레딩 모듈은 local이라는 클래스를 제공합니다. (추천 학습: Python 동영상 튜토리얼)
로컬 변수를 사용할 때 매개변수를 전달해야 하는 경우가 있습니다. 예를 들어 프로그램이 고객 애플리케이션을 처리할 때 고객이 들어올 때마다 처리를 위해 새로운 스레드가 열리고 고객은 이름, 나이, 성별 등과 같은 속성(매개변수)을 갖게 됩니다. 모두 통과해야 합니다. Python은 스레드 로컬 변수의 전송을 용이하게 하기 위해 threading.local 모듈을 제공합니다. 다음 예를 직접 보면:
# /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!!!'
각 스레드는 서로 간섭하지 않고 threading.local 개체를 읽고 쓸 수 있음을 알 수 있습니다. threading.local을 합리적으로 사용하면 각 하위 스레드의 데이터 보안을 보장하면서 코드 논리를 크게 단순화할 수 있습니다. Threading.local의 가장 큰 용도는 HTTP 요청 시 사용자 정보를 바인딩하여 각 사용자 스레드가 서로 간섭하지 않고 자신의 리소스에 쉽게 액세스할 수 있도록 하는 것입니다.
더 많은 Python 관련 기술 기사를 보려면 Python Tutorial 열을 방문하여 알아보세요!
위 내용은 Python에서 스레드 지역 변수를 정의하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!