私は Python のプログレス バーについて調査しましたが、解決策の多くは既知の個別のチャンクに分割された作業に基づいているようです。つまり、既知の回数反復しstdout
、反復の終わりに向けて進行状況のパーセンテージ ポイントが作成されるたびに進行状況バーを更新します。
私の問題は少し離散的です。何百ものサブディレクトリを含むユーザー ディレクトリを調べ、MP3 情報を収集し、それをデータベースに入力する必要があります。繰り返しの前にディレクトリ内の MP3 ファイルの数を数え、それを個別のチャンクのガイドラインとして使用することもできますが、多くの mp3 ファイルが既にデータベースに存在している可能性があり、一部のファイルは他のファイルよりも読み取りに時間がかかり、エラーが発生する可能性があります。発生し、場合によっては処理する必要があります。さらに、今後の参考のために、非離散チャンクでこれを実現する方法を知りたいです。興味がある場合は、これが私の directory-walk/database-update のコードです。
import mutagen
import sys
import os
import sqlite3 as lite
for root, dirs, files in os.walk(startDir):
for file in files:
if isMP3(file):
fullPath = os.path.join(root, file)
# Check if path already exists in DB, skip iteration if so
if unicode(fullPath, errors="replace") in pathDict:
continue
try:
audio = MP3(fullPath)
except mutagen.mp3.HeaderNotFoundError: # Invalid file/ID3 info
#TODO: log for user to look up what files were not visitable
continue
# Do database operations and error handling therein.
スレッド化は、このようなものにアプローチするための最良の方法ですか? もしそうなら、スレッド化がこれをどのように達成するかについての良い例はありますか? このためのモジュールは必要ありません。(a) どうすればよいかを知っておく必要があるように思われ、(b) 依存関係が少ない状況向けに開発しているからです。