26 votes

Utilisez tqdm avec concurrent.futures?

J'ai une fonction multithreaded pour laquelle je voudrais une barre de progression en utilisant tqdm. Existe-t-il un moyen facile d'afficher une barre de progression avec ThreadPoolExecutor? C'est la partie de la parallélisation qui me perturbe.

import concurrent.futures

def f(x):
    return f**2

my_iter = range(1000000)

def run(f,my_iter):
    with concurrent.futures.ThreadPoolExecutor() as executor:
        function = list(executor.map(f, my_iter))
    return results

run(f, my_iter) # envelopper tqdr autour de cette fonction?

36voto

Dat Nguyen Points 527

Vous pouvez envelopper tqdm autour du executor comme suit pour suivre la progression:

list(tqdm(executor.map(f, iter), total=len(iter))

Voici votre exemple:

import time  
import concurrent.futures
from tqdm import tqdm

def f(x):
    time.sleep(0.001)  # pour visualiser la progression
    return x**2

def run(f, my_iter):
    with concurrent.futures.ThreadPoolExecutor() as executor:
        results = list(tqdm(executor.map(f, my_iter), total=len(my_iter)))
    return results

my_iter = range(100000)
run(f, my_iter)

Et le résultat est comme suit:

16%|██▏           | 15707/100000 [00:00<00:02, 31312.54it/s]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X