Python의 Lock 및 Rlock 상세 정보

3041 단어 pythonlockrlock
루틴은 프로세스에서 실행을 스케줄링할 수 있는 실체입니다.그리고 이것은 운영체제에서 실행할 수 있는 최소 처리 단원이다.간단하게 말하면, 하나의 루틴은 프로그램에서 다른 코드에 독립적으로 실행할 수 있는 명령 서열이다.간단하게 보기 위해서, 너는 라인이 프로세스의 서브집합일 뿐이라고 가정할 수 있다.

Locks


자물쇠는 Python에서 동기화하는 가장 간단한 방법입니다.자물쇠는 두 가지 상태가 있는데 그것이 바로 자물쇠를 잠그고 놓는 것이다.
자물쇠는 라인 모듈의 한 종류로 두 가지 주요 방법이 있습니다. acquire () 와release () 는 acquire () 방법을 호출할 때, 자물쇠의 실행을 잠그고 자물쇠의 실행을 막습니다. 다른 라인이 Release () 방법을 호출할 때까지 자물쇠 해제 상태로 설정합니다.자물쇠는 우리가 프로그램의 공유 자원에 효과적으로 접근하여 데이터의 손상을 방지하는 데 도움을 준다. 왜냐하면 한 번에 하나의 라인만 특정한 자원에 접근할 수 있기 때문이다.
다음은 자물쇠의 사용을 정리하는 예입니다.

import threading
 
# lock 
lock = threading.Lock()
 
# 
abce = 0
 
def sumOne():
    global abce
 
    # 
    lock.acquire()
    abce = abce + 1
 
    # 
    lock.release()
 
def sumTwo():
    global abce
 
    # 
    lock.acquire()
    abce = abce + 2
 
    # 
    lock.release()
 
# 
 
sumOne()
sumTwo()
print(abce)
위의 프로그램에서 lock은 자물쇠 대상이다. 전역 변수 abce는 공유 자원이다. sumOne ()과sumTwo () 함수는 두 개의 라인으로 분장하고sumOne () 함수에서 공유 자원 abce는 먼저 잠긴 다음에 1을 추가한 다음에 abce가 방출된다.sumTwo() 함수는 유사한 작업을 수행합니다.두 함수sumOne () 과sumTwo () 는 공유 자원 abce에 동시에 접근할 수 없습니다. 한 번에 공유 자원에 한 번만 접근할 수 있습니다.

RLocks


기본lock은 lock이 현재 어느 라인에 가지고 있는지 식별할 수 없습니다.공유 자원에 접근하고 있는 라인이 있다면, 공유 자원에 접근하려는 다른 라인은 차단됩니다. 공유 자원을 잠그는 라인도 마찬가지입니다.이러한 경우 공유 리소스에 액세스할 때 불필요한 장애를 방지하기 위해 자물쇠 (또는 RLOCK) 를 다시 입력할 수 있습니다.공유 자원이 RLOCK에 있으면 안전하게 다시 호출할 수 있습니다.RLocked 자원은 서로 다른 라인에 반복적으로 접근할 수 있으며, 다른 라인에 호출될 때도 정상적으로 작동할 수 있습니다.
다음은 Rlocks의 사용을 이해하기 위한 예입니다.

import threading
 
# lock 
lock = threading.Lock()
 
# 
abce = 0
 
# 
lock.acquire()
abce = abce + 1
 
# 
lock.acquire()
abce = abce + 2
lock.release()
 
print(abce)
위의 프로그램에서 두 개의 루트가 공유 자원 abce에 동시에 접근하려고 시도합니다. 한 루트가 현재 공유 자원 abce에 접근하고 있을 때 다른 루트가 접근하지 못하게 됩니다.두 개 이상의 라인이 같은 자원에 접근하려고 시도할 때 서로 이 자원에 접근하는 것을 효과적으로 막는다. 이것이 바로 잠금장치라는 것이기 때문에 상술한 프로그램은 어떠한 출력도 생성하지 않았다.
단, 프로그램에서 상술한 문제는 RLock을 사용하여 해결할 수 있다.

import threading
 
# rlock 
lock = threading.RLock()
 
# 
abce = 0
 
# 
lock.acquire()
abce = abce + 1
 
# 
lock.acquire()
abce = abce + 2
lock.release()
 
print(abce)
프로그램에서 공유 자원 abce에 접근하는 것을 막지 못했습니다.RLock 개체가 잠긴 모든 acquire () 에 대해release () 를 한 번 호출해야 합니다.
위에서 언급한 많은 프로그램과 설명에서 Python에서 Lock 객체와 RLock 객체는 여러 가지 차이가 있습니다.
locks
rlocks
lock 대상은 다른 라인에서 얻을 수 없습니다. 라인을 가지고 있지 않으면
rlock 대상은 다른 라인에서 여러 번 얻을 수 있습니다
lock 대상은 모든 라인에서 방출될 수 있습니다
rlock 대상은 소지한 라인만 방출됩니다.
lock 대상은 어떤 라인에도 소유할 수 없습니다
rlock 대상은 여러 개의 라인에 소유할 수 있습니다
객체에 대한 잠금이 매우 빠릅니다.
한 대상에 rlock을 넣는 것이 lock을 넣는 것보다 느리다
이상은 Python의 Lock과 Rlock에 대한 상세한 내용입니다. Python의 Lock과 Rlock에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!

좋은 웹페이지 즐겨찾기