>  기사  >  백엔드 개발  >  Python 스레드의 세마포어 및 제한된 세마포어 소개

Python 스레드의 세마포어 및 제한된 세마포어 소개

不言
不言원래의
2018-09-11 16:28:051014검색

이 기사는 Python 스레드의 세마포어 및 제한된 세마포어에 대한 소개를 제공합니다. 필요한 친구가 참고할 수 있기를 바랍니다.

세마포어 및 제한된 세마포

세마포어는 카운터 기반 동기화 프리미티브입니다. acquire() 메서드가 호출될 때마다 카운터가 1씩 감소하고 release() 메서드가 호출될 때마다 카운터가 1씩 증가합니다. 1. . 카운터가 0이면 다른 스레드가 release() 메서드를 호출할 때까지 acquire() 메서드가 차단됩니다.

세마포어

구문: ​​
s=Semqphore(value)

새 세마포어를 만듭니다. 값은 카운터의 초기 값입니다. 값을 생략하면 기본값은 1

입니다. 일반적인 방법:

s.acquire(blocking): 세마포어를 가져옵니다. 내부 카운터가 0보다 큰 경우 이 메서드는 해당 값을 1씩 감소시킵니다.
그럼 즉시 돌아오세요. 값이 0이면 이 메서드는 다른 스레드가 release() 메서드를 호출할 때까지 차단됩니다.
차단 매개변수는 Lock 및 RLock 개체에 대해 설명된 대로 작동합니다.

s.release(): 내부 카운터 값에 1을 더하여 세마포어를 해제합니다.
카운터가 0이고 다른 스레드가 기다리고 있으면 스레드가 깨어납니다.
여러 스레드가 대기 중인 경우 acquire() 호출에서 하나만 반환될 수 있으며 순서는 정의되지 않습니다.

바운드 세마포어

구문: ​​
bs=BoundedSemaphore(value)

새 바운드 세마포어를 만듭니다. value는 카운터의 초기 값입니다. 생략하면 기본값은 1입니다.

세마포어와 제한된 세마포어의 차이점

BoundedSemaphore는 Semaphore와 정확히 동일하게 작동하지만 release() 작업 수가 acquire()를 초과할 수 없습니다. 작업 수.

세마포어와 뮤텍스의 미묘한 차이

세마포어는 신호를 보내는 데 사용할 수 있습니다. 예를 들어, acquire() 및 release() 메서드를 다른 스레드에서 호출하여 생산자 스레드와 소비자 스레드 간에 통신할 수 있습니다.

관련 권장 사항:

Python3에서 세마포어 사용에 대한 자세한 설명입니다. (자세한 예시)

위 내용은 Python 스레드의 세마포어 및 제한된 세마포어 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.