Python의 Lock 및 Rlock 상세 정보
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에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.