기계는 거짓말하지 않는다

Python RLock 자원 동시 접근 관리 본문

Python

Python RLock 자원 동시 접근 관리

KillinTime 2022. 7. 22. 21:55

Mutex와 유사하다고 생각하면 된다.

https://docs.python.org/ko/3/library/threading.html#rlock-objects

 

threading — 스레드 기반 병렬 처리 — Python 3.10.5 문서

threading — 스레드 기반 병렬 처리 소스 코드: Lib/threading.py 이 모듈은 저수준 _thread 모듈 위에 고수준 스레딩 인터페이스를 구축합니다. queue 모듈도 참조하십시오. 버전 3.7에서 변경: 이 모듈은

docs.python.org

RLock은 재귀 호출 시 문제를 고려한 lock이다.

RLock 미사용

import threading

number = 0

def multi_call_function(call_name : str):
    global number
    number += 1
    
    print(f"Call Name: {call_name}, Number: {number}")
    
    
def function_A():
    for i in range(3):
        multi_call_function("function_A")
    
def function_B():
    for i in range(3):
        multi_call_function("function_B")
    
thread_a = threading.Thread(target=function_A)
thread_b = threading.Thread(target=function_B)

thread_a.start()
thread_b.start()

thread_a.join()
thread_b.join()

RLock 사용

from threading import RLock
import threading

lock = RLock()
number = 0

def multi_call_function(call_name : str):
    global number
    with lock:
        number += 1
        
        print(f"Call Name: {call_name}, Number: {number}")
    
    
def function_A():
    for i in range(3):
        multi_call_function("function_A")
    
def function_B():
    for i in range(3):
        multi_call_function("function_B")
    
thread_a = threading.Thread(target=function_A)
thread_b = threading.Thread(target=function_B)

thread_a.start()
thread_b.start()

thread_a.join()
thread_b.join()

Comments