0

ファイルをクラウド アカウントにアップロードするスクリプトを作成しています。ファイルを含むさまざまなディレクトリがありますが、深さは 1 つだけです...ディレクトリ内にネストされたディレクトリはありません。各ディレクトリは、ファイルが入るコンテナーになります。場合によっては、ファイルが 300,000 ファイルにもなることがあります。マルチプロセッシングを使用します。

ファイル名、出力情報、リターン コードを sqlite を使用して追跡したいので、いくつか質問がありました。

1)フラットファイルとしてではなくメモリ内でのみsqlite3を実行した場合(スクリプトが完了するまで情報が必要なため)、メモリが肥大化しますか?2) リストの膨大なリストまたはリストの辞書を追跡するのではなく、sqlite3 を使用するとパフォーマンスに大きな影響がありますか?

4

1 に答える 1

0

結果をディスクに保持する必要がない場合は、メイン プロセスでディクショナリ構造を使用できます。その後.imap_unordered、リアルタイムで結果を管理するために使用できます。

疑似コードで

files = [....] 
results = {}

r = pool.imap_unordered(uploadfile, files)
for res in r:
  results[res.fileid] = res.statuscode #for example

print_results_summary()

メモリへの影響は、results辞書に保存する情報によって異なります。結果ステータス コードを格納する 300.000 エントリの場合、多すぎません。

私のシステムでは、値が 300.000 のディクショナリintにより、Python プロセスが約 20 MB 増加しました。

于 2013-09-16T16:28:03.820 に答える