将tqdm与concurrent.futures一起使用?

问题描述 投票:8回答:1

我有一个多线程函数,我想要一个状态栏来使用tqdm。有没有一种简单的方法来显示ThreadPoolExecutor的状态栏?并行化部分令我感到困惑。

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) # wrap tqdr around this function?
python concurrent.futures tqdm
1个回答
14
投票

您可以将tqdm包裹在executor周围,如下所示,以跟踪进度:

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

这是你的例子:

import time  
import concurrent.futures
from tqdm import tqdm

def f(x):
    time.sleep(0.001)  # to visualize the progress
    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)

结果是这样的:

16%|██▏           | 15707/100000 [00:00<00:02, 31312.54it/s]
© www.soinside.com 2019 - 2024. All rights reserved.