python 스 레 드 탱크(threadpool)모듈 사용 노트 상세 설명

최근 에 영상 기기 관 리 를 하 는 프로젝트 는 기기(카메라,DVR,NVR 등),기기 정보 보완,기기 상태 푸 시,기기 스 트림 주소 푸 시 등 을 포함한다.만약 에 동시에 가 져 온 장치 의 수량 이 많 으 면 단일 스 레 드 로 기기 검 사 를 하면 기기 의 수량 이 많 기 때문에 비교적 큰 지연 시간 을 가 져 올 수 있 기 때문에 다 중 스 레 드 로 이 문 제 를 처리 하 는 것 을 고려한다.
python 언어 를 사용 하여 스스로 스 레 드 탱크 를 실현 하거나 제3자 패키지 threadpool 스 레 드 탱크 를 사용 할 수 있 습 니 다.본 주 제 는 주로 threadpool 의 사용 과 그 안의 구체 적 인 실현 을 소개 합 니 다.
설치 및 안내

pip install threadpool  

pool = ThreadPool(poolsize) 
requests = makeRequests(some_callable, list_of_args, callback) 
[pool.putRequest(req) for req in requests] 
pool.wait() 
첫 번 째 줄 은 poolsize 이렇게 많은 스 레 드 를 만 들 수 있 음 을 나타 내 는 스 레 드 풀 을 정의 합 니 다.
두 번 째 줄 은 MakeRequests 를 호출 하여 다 중 스 레 드 를 열 함수 와 함수 관련 매개 변수 와 리 셋 함 수 를 만 들 었 습 니 다.그 중에서 리 셋 함 수 는 쓰 지 않 아 도 됩 니 다.default 는 없습니다.즉,MakeRequests 는 2 개의 매개 변수 만 있 으 면 실행 할 수 있 습 니 다.
세 번 째 줄 의 용법 은 이상 합 니 다.다 중 스 레 드 를 실행 할 모든 요청 을 스 레 드 풀 에 던 지 는 것 입 니 다.[pool.putRequest(req)for req in requests]는
for req in requests:  pool.putRequest(req)
네 번 째 줄 은 모든 스 레 드 가 작업 이 끝 난 후에 종료 하 는 것 입 니 다.
코드 인 스 턴 스

import time
def sayhello(str):
  print "Hello ",str
  time.sleep(2)

name_list =['xiaozi','aa','bb','cc']
start_time = time.time()
for i in range(len(name_list)):
  sayhello(name_list[i])
print '%d second'% (time.time()-start_time)

스 레 드 탱크 코드 를 바 꾸 면 시간 이 더 적 고 효율 적 입 니 다.

import time
import threadpool 
def sayhello(str):
  print "Hello ",str
  time.sleep(2)

name_list =['xiaozi','aa','bb','cc']
start_time = time.time()
pool = threadpool.ThreadPool(10) 
requests = threadpool.makeRequests(sayhello, name_list) 
[pool.putRequest(req) for req in requests] 
pool.wait() 
print '%d second'% (time.time()-start_time)
함수 에 여러 개의 인자 가 있 을 때 함수 호출 시 첫 번 째 패키지 해제 list,두 번 째 패키지 dict 가 있 기 때문에 이렇게 할 수 있 습 니 다.

def hello(m, n, o):
  """"""
  print "m = %s, n = %s, o = %s"%(m, n, o)
   
 
if __name__ == '__main__':
   
  #   1 
  lst_vars_1 = ['1', '2', '3']
  lst_vars_2 = ['4', '5', '6']
  func_var = [(lst_vars_1, None), (lst_vars_2, None)]
  #   2
  dict_vars_1 = {'m':'1', 'n':'2', 'o':'3'}
  dict_vars_2 = {'m':'4', 'n':'5', 'o':'6'}
  func_var = [(None, dict_vars_1), (None, dict_vars_2)]  
   
  pool = threadpool.ThreadPool(2)
  requests = threadpool.makeRequests(hello, func_var)
  [pool.putRequest(req) for req in requests]
  pool.wait()    

들 어 오 는 매개 변 수 를 변환 한 다음 에 스 레 드 탱크 를 가 져 가 야 합 니 다.

def getuserdic():
  username_list=['xiaozi','administrator']
  password_list=['root','','abc123!','123456','password','root']
  userlist = []
  
  for username in username_list:
    
    user =username.rstrip()
    for password in password_list:
      pwd = password.rstrip()
      userdic ={}
      userdic['user']=user
      userdic['pwd'] = pwd
      tmp=(None,userdic)
      userlist.append(tmp)
  return userlist
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기