web-dev-qa-db-ja.com

concurrent.futuresでtqdmを使用しますか?

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?
18
max

次のようにtqdmexecutorの周りにラップして、進行状況を追跡できます。

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]
24
Dat Nguyen