python 스 레 드 신 호 량 semaphore 사용 분석

이 글 은 주로 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()를 직접 시작 합 니 다.출력 시간 은 모두 같 습 니 다.이 문 제 는 비교적 간단 합 니 다.직접 실험 해 보 세 요!
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기