Python에서 스레드 지역 변수를 정의하는 방법

(*-*)浩
풀어 주다: 2019-07-04 13:54:33
원래의
2971명이 탐색했습니다.

스레드 로컬 변수라는 개념이 있습니다. 일반적으로 멀티 스레드에서는 전역 변수를 잠급니다. 이 변수는 공유 변수입니다. 각 스레드는 동기화를 유지하기 위해 변수를 읽고 쓸 수 있습니다. .

Python에서 스레드 지역 변수를 정의하는 방법

하지만 일부 변수가 초기화된 후에는 해당 변수가 각 스레드에 항상 존재하기를 원합니다. 이는 스레드 내에서 공유하는 것과 같습니다. . 스레드 간에 격리된 변수는 지역 변수입니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!