python 스 레 드 신 호 량 semaphore 사용 분석
1.semaphore 신 호 량 원리
다 중 스 레 드 가 동시에 실행 되면 프로그램의 운행 효율 을 높 일 수 있 습 니 다.그러나 스 레 드 가 많 을 수록 좋 은 것 이 아 닙 니 다.semaphore 신 호 량 은 내장 계수 기 를 통 해 동시에 실행 되 는 스 레 드 의 수량 을 제어 할 수 있 습 니 다.시작 스 레 드(신 호 량 소모)내장 계수 기 는 자동 으로 1 을 줄 이 고 스 레 드 종료(신 호 량 방출)내장 계수 기 는 자동 으로 1 을 추가 합 니 다.이 스 레 드 가 끝나 거나 다른 스 레 드 가 끝 날 때 까지 내 장 된 계수 기 는 0 입 니 다.
2.semaphore 신 호 량 관련 함수 소개
acquire()―신 호 량 소모,내장 카운터 1 감소;
release()―신 호 량 을 방출 하고 내 장 된 카운터 에 1 을 추가 합 니 다.
semaphore 신 호 량 에 내장 카운터 가 있 습 니 다.스 레 드 의 수량 을 제어 하고 acquire()는 신 호 량 을 소모 하 며 계수 기 는 자동 으로 1 을 줄 입 니 다.release()는 신 호 량 을 방출 하고 계수 기 는 자동 으로 1 을 추가 합 니 다.카운터 가 0 일 때,acquire()호출 이 차단 되 어 release()가 신 호 량 을 방출 할 때 까지 합 니 다.
3.semaphore 신 호 량 사용
여러 개의 스 레 드 를 만 들 고 같은 시간 에 최대 5 개의 스 레 드 를 실행 하도록 제한 합 니 다.예제 코드 는 다음 과 같 습 니 다.
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:
@Blog( ): shuopython.com
@WeChat Official Account( ): python
@Github:www.github.com
@File:python_semaphore.py
@Time:2019/10/23 21:25
@Motto: , , !
"""
#
import threading
#
import time
# , 5( 5 )
semaphore = threading.Semaphore(5)
def foo():
semaphore.acquire() #
time.sleep(2) # 2
print(" :",time.ctime()) #
semaphore.release() #
if __name__ == "__main__":
thread_list= list()
for i in range(20):
t=threading.Thread(target=foo,args=()) #
thread_list.append(t)
t.start() #
for t in thread_list:
t.join()
print(" !")
출력 결과:
: Wed Oct 23 22:21:59 2019
: Wed Oct 23 22:21:59 2019
: Wed Oct 23 22:21:59 2019
: Wed Oct 23 22:21:59 2019
: Wed Oct 23 22:21:59 2019
: Wed Oct 23 22:22:01 2019
: Wed Oct 23 22:22:01 2019
: Wed Oct 23 22:22:01 2019
: Wed Oct 23 22:22:01 2019
: Wed Oct 23 22:22:01 2019
: Wed Oct 23 22:22:03 2019
: Wed Oct 23 22:22:03 2019
: Wed Oct 23 22:22:03 2019
: Wed Oct 23 22:22:03 2019
: Wed Oct 23 22:22:03 2019
: Wed Oct 23 22:22:05 2019
: Wed Oct 23 22:22:05 2019
: Wed Oct 23 22:22:05 2019
: Wed Oct 23 22:22:05 2019
: Wed Oct 23 22:22:05 2019
!
인쇄 된 로그 에 따 르 면 같은 시간 에 5 개의 스 레 드 만 실 행 됩 니 다.2 초 간격 으로 5 개의 스 레 드 를 다시 시작 합 니 다.20 개의 스 레 드 가 모두 실 행 될 때 까지.신 호 량 Semapaore 를 설정 하지 않 으 면 라인 을 만 들 고 start()를 직접 시작 합 니 다.출력 시간 은 모두 같 습 니 다.이 문 제 는 비교적 간단 합 니 다.직접 실험 해 보 세 요!이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.