我正在使用xargs
一个 python 脚本来处理大约 3000 万个小文件。我希望用来xargs
并行化这个过程。我使用的命令是:
find ./data -name "*.json" -print0 |
xargs -0 -I{} -P 40 python Convert.py {} > log.txt
Run Code Online (Sandbox Code Playgroud)
基本上,Convert.py
会读入一个小的json文件(4kb),做一些处理并写入另一个 4kb 文件。我在具有 40 个 CPU 内核的服务器上运行。并且此服务器上没有运行其他 CPU 密集型进程。
通过监控 htop(顺便说一句,有没有其他好的方法来监控 CPU 性能?),我发现它-P 40
没有预期的那么快。有时所有内核会冻结并在 3-4 秒内几乎降至零,然后恢复到 60-70%。然后我尝试将并行进程的数量减少到-P 20-30
,但它仍然不是很快。理想的行为应该是线性加速。对 xargs 的并行使用有什么建议吗?
我有一个包含 30M 小文件的大文件夹。我希望将文件夹备份成 30 个档案,每个 tar.gz 文件将有 1M 个文件。拆分成多个档案的原因是解压一个大档案需要一个月的时间。要拆分的管道 tar 也不起作用,因为在解压文件时,我必须将所有档案一起分类。
另外,我希望不要将每个文件 mv 到一个新目录,因为对于这个巨大的文件夹,即使是 ls 也是非常痛苦的。