실패는 성공을 위한 밑거름

파이썬에서 스레드로 동일한 함수사용할때 전역변수 처리 본문

devops/back-end

파이썬에서 스레드로 동일한 함수사용할때 전역변수 처리

레드매실 2024. 10. 17. 05:18

방법 1: 로컬 변수 사용

각 스레드가 자신만의 로컬 변수를 생성하여 사용하는 방식입니다. 이 경우, 전역 변수는 사용하지 않고, 각 스레드가 로컬 변수를 통해 자신만의 값을 유지하게 됩니다.

import threading
import time

def thread_function(name, local_value):
    # local_value를 통해 각 스레드가 고유한 값을 유지
    for _ in range(5):
        print(f"Thread {name}: local_value = {local_value}")
        time.sleep(1)

# 각 스레드에서 사용할 로컬 값 설정
thread_a_value = 1
thread_b_value = 2

# 스레드 생성 및 시작
thread_a = threading.Thread(target=thread_function, args=("A", thread_a_value))
thread_b = threading.Thread(target=thread_function, args=("B", thread_b_value))

thread_a.start()
thread_b.start()

thread_a.join()
thread_b.join()

출력 예시

 

Thread A: local_value = 1
Thread B: local_value = 2
Thread A: local_value = 1
Thread B: local_value = 2
...

 

방법 2: 클래스 사용

스레드의 상태를 클래스의 인스턴스 변수로 관리하면, 각 스레드가 객체의 속성을 통해 독립적으로 상태를 유지할 수 있습니다

import threading
import time

class MyThread(threading.Thread):
    def __init__(self, name, value):
        super().__init__()
        self.name = name
        self.local_value = value

    def run(self):
        for _ in range(5):
            print(f"Thread {self.name}: local_value = {self.local_value}")
            time.sleep(1)

# 스레드 생성
thread_a = MyThread("A", 1)
thread_b = MyThread("B", 2)

# 스레드 시작
thread_a.start()
thread_b.start()

thread_a.join()
thread_b.join()

출력 예시

Thread A: local_value = 1
Thread B: local_value = 2
Thread A: local_value = 1
Thread B: local_value = 2
...

 

스레드로 똑같은 함수를 돌릴경우 전역변수 공유문제는 클래스로 처리하는편이 좋아보인다.

지피티가 그랬음ㅇㅇ..

'devops > back-end' 카테고리의 다른 글

ModuleNotFoundError: No module named 'Crypto' 오류 해결방법  (0) 2024.10.15
JAVA 팁  (0) 2022.08.17