2017-09-11 15 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)は、スレッドを作成し、executor.shutdown()でエグゼキュータをシャットダウンするか、エグゼキュータ自身がそれほど多くのスレッドを必要としないと判断するまで、それらのスレッドを有効にします。とにかく、executorがアクティブな場合は、Xが予想されるスレッドの量です。

+0

実際に実行されているスレッドの数を追跡できますか?私の目的は、max_workersの最適化された数を選択することです。現在、グローバルカウンタを使用しています(つまり、関数を送信する場合は+1、関数が返される場合は-1)。 – user2923419

+0

@ user2923419 'ThreadPoolExecutor'を使っているときにスレッドの数を追跡する必要はありません。あなたが定義した数のスレッドがあると、安全に仮定できます。あなたがここで何をしようとしているのか分かりません。 – freakish

+0

だから、max_workersを10に設定して100に設定することに違いがあると思いますか?効率を改善できない場合は余分なスレッドを生成したくありません。 – user2923419

関連する問題