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