【发布时间】:2018-11-04 06:17:01
【问题描述】:
我有一个 bash 命令,它获取一个充满 XML 文件的目录,通过 XSLT 将它们运行到 CSV,并将所有转换组合到一个文件中。我一直在尝试使用parallel,但此命令的 CPU 使用率从未超过 100%。我不能为此使用xargs,因为输出会散布在其中。
这需要大约 30 秒,但同样,输出是穿插的:
find /path/to/xml -type f -iname '*.xml' -print0 | xargs -0 -P8 xsltproc transform.xsl > out.txt
这需要大约 90 秒。单核。
find /path/to/xml -type f -iname '*.xml' -print0 | xargs -0 xsltproc transform.xsl > out.txt
这也需要大约 90 秒。与单核一样慢,top 的 CPU 使用率永远不会超过 100%。
find /path/to/xml -type f -iname '*.xml' -print0 | parallel -0 xsltproc transform.xsl > out.txt
这看起来很简单,我不知道我错过了什么。谁能给个建议?
【问题讨论】:
-
xml文件的大小是多少?也许瓶颈是磁盘操作?
-
有 17698 个 XML 文件,文件大小中位数为 53947 字节。不知道这怎么可能是真的,因为 xargs 并行在 30 秒内完成。
标签: bash parallel-processing xargs gnu-parallel