Python脚本上传300,000个文件 - Sqlite3还是大量列表?

时间:2013-09-14 19:53:49

标签: python file-upload sqlite multiprocessing

我正在编写一个将文件上传到云帐户的脚本。将有各种包含文件的目录,但只有一个深度...目录中将有嵌套/目录。每个目录都是文件将进入的容器。有时文件可能大到300,000个文件。我将使用多处理。

我想跟踪文件名,outoutput信息,使用sqlite返回代码,所以我有几个问题:

1)如果我只在内存中运行sqlite3而不是平面文件(因为我只需要信息,直到我完成了脚本)它会使内存膨胀吗? 2)使用sqlite3会产生重大的性能影响,而不是跟踪大量列表或列表字典吗?

1 个答案:

答案 0 :(得分: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进程增长了大约20mb。