0

我正在编写一个将文件上传到云帐户的脚本。将有包含文件的各种目录,但只有一个深度......目录内不会有嵌套/目录。每个目录将是一个容器,文件将进入其中。有时文件可能高达 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 进程增长了大约 20mb。

于 2013-09-16T16:28:03.820 回答