メモ_JupyterNotebookでtqdmを利用してプログレスバーを表示する

JupyterNotebookで処理時間が長いコードを実行する際、完了までどのくらいかかるか、どのくらい進行したかをリアルタイムでプログレスバーで表示したい場合、tqdmというライブラリを利用することができます。

pip install tqdm
コード例:

サンプルとして、MySQLのデータベースに素数を格納する処理を実行します。上限は自然数100万で、78498個の素数が格納されます。

from tqdm import tqdmによってtqdmをインポートし、with tqdm(total=len(primes), desc="Inserting primes") as pbar:というコンテキストマネージャを使用してプログレスバーを表示しています。ループ内でpbar.update(1)を呼び出すことで、進行状況をリアルタイムで更新しています。 これで、Jupyter Notebookでコードを実行すると、進行中であることをプログレスバーで確認できるようになります。


import time
import json
import mysql.connector
from tqdm import tqdm #プログレスバー表示用のライブラリをインポート

start_time = time.time()

# データベース情報
database_info = {
    "host": "YOUR_MYSQL_HOST",
    "user": "YOUR_MYSQL_USERNAME",
    "password": "YOUR_MYSQL_PASSWORD",
    "database": "YOUR_database"
}

limit = 1000000
sieve = [True] * (limit + 1)
sieve[0] = sieve[1] = False

for i in range(2, int(limit ** 0.5) + 1):
    if sieve[i]:
        for j in range(i * i, limit + 1, i):
            sieve[j] = False

primes = [i for i in range(limit + 1) if sieve[i]]

# MySQLデータベースに素数を保存
try:
    conn = mysql.connector.connect(**database_info)
    cursor = conn.cursor()

    # 既存のデータを削除
    cursor.execute("TRUNCATE TABLE prime_list")

    # 新しい素数リストを挿入
    with tqdm(total=len(primes), desc="Inserting primes") as pbar:
        for prime in primes:
            cursor.execute("INSERT INTO prime_list (prime_num) VALUES (%s)", (prime,))
            pbar.update(1)

    conn.commit()
    print("Successfully saved the primes to the database.")

except mysql.connector.Error as err:
    print("Error:", err)

finally:
    if cursor:
        cursor.close()
    if conn:
        conn.close()

end_time = time.time()

print("Found", len(primes), "primes.")
print("Time taken: {:.5f} seconds".format(end_time - start_time))

結果:

以下のように成功しました。せっかくのプログレスバーなのでgifアニメで貼り付けました。とても簡単なコードでこういうことが実現できるのは、本当に素晴らしいですね。