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アニメで貼り付けました。とても簡単なコードでこういうことが実現できるのは、本当に素晴らしいですね。