我正在编写一个将文件上传到云帐户的脚本。将有各种包含文件的目录,但只有一个深度...目录中将有否嵌套/目录。每个目录都是文件将进入的容器。有时文件可能大到300,000个文件。我将使用多处理。
我想跟踪文件名,outoutput信息,使用sqlite返回代码,所以我有几个问题:
1)如果我只在内存中运行sqlite3而不是平面文件(因为我只需要信息,直到我完成了脚本)它会使内存膨胀吗? 2)使用sqlite3会产生重大的性能影响,而不是跟踪大量列表或列表字典吗?
答案 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。