Pour un ThreadPoolExecutor
, je veux surveiller le nombre de threads qui sont en cours d'exécution. Mais il semble que c'est impossible. Le nombre de threads actifs augmente continuellement. Pour un thread normal, si la fonction cible revient, le thread s'arrêtera.Réduire le nombre de threads actifs créés par 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
Alors, est-ce que je peux suivre le nombre de threads qui fonctionnent réellement? Mon but est de choisir un nombre optimisé de max_workers. Actuellement, j'utilise un compteur global pour faire cela (c'est-à-dire +1 lors de la soumission de la fonction et -1 lorsque la fonction retourne). – user2923419
@ user2923419 Vous n'avez pas besoin de suivre le nombre de threads lorsque vous utilisez ThreadPoolExecutor. Vous pouvez supposer qu'il existe autant de threads que vous avez définis. Je ne suis pas sûr de ce que vous essayez de faire ici. – freakish
Donc je pense qu'il y a une différence entre mettre max_workers à 10 et le mettre à 100, non? Je ne veux pas générer de threads supplémentaires s'ils ne peuvent pas améliorer l'efficacité. – user2923419