Pythonでプログレスバーウィジェットを使って処理の進捗を表示する方法

この記事では、Pythonでプログレスバーウィジェットを使って処理の進捗を表示する方法について詳しく説明します。具体的なコード例とその解説、さらには応用例までを網羅しています。

目次

基本的なプログレスバーの使用方法

Pythonでは多くの処理を繰り返し実行する場合、その進捗を可視化する方法が求められます。ここでは、`tqdm`というライブラリを使用してシンプルなプログレスバーを作成します。

from tqdm import tqdm
import time

# 繰り返し処理(例:0から99まで)
for i in tqdm(range(100)):
    time.sleep(0.1)  # 何らかの処理(0.1秒待機)

コード解説

この例では、tqdmライブラリを使っています。このライブラリは、ループ処理の進捗をプログレスバーで表示する機能を提供しています。`time.sleep(0.1)`は、処理が完了するまでの時間を0.1秒に設定しているだけです。

カスタムプログレスバーの作成

基本的なプログレスバーでは不足する場合、カスタマイズが可能です。

from tqdm import trange

# カスタムプログレスバー
for i in trange(100, desc='Processing', ascii=True, ncols=100):
    time.sleep(0.1)

コード解説

`trange()`は、tqdmの進捗バーをさらに細かく制御する関数です。`desc`で処理の説明を、`ascii`でASCIIキャラクターのみを使用し、`ncols`でプログレスバーの幅を指定しています。

応用例1: ファイルのダウンロード進捗表示

ファイルをダウンロードする際に、プログレスバーで進捗を表示する例です。

import requests
from tqdm import tqdm

url = 'https://example.com/large-file.zip'
response = requests.get(url, stream=True)

with open('large-file.zip', 'wb') as f:
    total_length = int(response.headers.get('content-length'))
    for chunk in tqdm(response.iter_content(chunk_size=1024), total=total_length//1024, unit='KB'):
        f.write(chunk)

コード解説

この例では、`requests`ライブラリを使って大きなファイルをダウンロードしています。ダウンロード進捗はtqdmのプログレスバーで表示されます。

応用例2: マルチスレッド処理との組み合わせ

複数の処理を同時に行い、それぞれの進捗を表示する例です。

from concurrent.futures import ThreadPoolExecutor
from tqdm import tqdm

def worker(n):
    time.sleep(n)
    return n

with ThreadPoolExecutor() as executor:
    futures = [executor.submit(worker, n) for n in [2, 3, 4]]
    for future in tqdm(concurrent.futures.as_completed(futures), total=len(futures), desc='Multithreading'):
        result = future.result()

コード解説

`ThreadPoolExecutor`を使用してマルチスレッド処理を実行しています。それぞれのスレッド(ワーカー)の処理完了をプログレスバーで確認できます。

まとめ

Pythonで処理の進捗を表示するためのプログレスバーウィジェットは多彩で、さまざまなカスタマイズや応用が可能です。上記の基本的な使い方や応用例を参考に、独自の処理に適用してみてください。

コメント

コメントする

目次