2017-09-11 19 views
1

ThreadPoolExecutor의 경우, 실제로 실행중인 스레드 수를 모니터하고 싶습니다. 그러나 이것이 불가능한 것처럼 보인다. 활성 스레드 수가 지속적으로 증가하고 있습니다. 일반 스레드의 경우 대상 함수가 반환하면 스레드가 종료됩니다.ThreadPoolExecutor에 의해 생성 된 활성 스레드 수를 줄입니까?

import threading, concurrent.futures 

def test(): 
    pass 

p_ac=threading.active_count() 
#Number of threads=2 

#for threads 
trs=[None]*10 
for i in range(10): 
    trs[i]=threading.Thread(target=test) 
    trs[i].start 

print(threading.active_count()==p_ac) 
#True 

#for executor 
executor=concurrent.futures.ThreadPoolExecutor(10) 
for _ in range(10): 
    executor.submit(test) 
print(threading.active_count()) 
#Number of threads=12 

답변

2

ThreadPoolExecutor가 활성화하지 않을 경우 종료의 스레드를 수행합니다. ThreadPoolExecutor(X)X 스레드를 생성하고 executor.shutdown()을 통해 실행 프로그램을 종료 할 때까지 해당 스레드를 활성 상태로 유지합니다. 그렇지 않으면 실행 프로그램 자체에서 너무 많은 스레드가 필요하지 않다고 결정합니다. 어쨌든 X은 실행 프로그램이 활성화 된 경우 예상되는 스레드 수입니다.

+0

실제로 실행중인 스레드 수를 추적 할 수 있습니까? 나의 목적은 최적화 된 수의 max_workers를 선택하는 것이다. 현재 전역 카운터를 사용하여 함수를 제출할 때 +1을 반환하고 함수가 반환 할 때 -1을 사용합니다. – user2923419

+0

@ user2923419'ThreadPoolExecutor'를 사용할 때 쓰레드 수를 추적 할 필요가 없습니다. 사용자가 정의한만큼의 스레드가 있다고 가정 할 수 있습니다. 네가 여기서 뭘하려고하는지 모르겠다. – freakish

+0

그래서 저는 max_workers를 10으로 설정하고 100으로 설정하는 것과 차이가 있다고 생각합니까? 효율성 향상에 도움이되지 않으면 여분의 스레드를 생성하고 싶지 않습니다. – user2923419