【发布时间】:2017-06-07 10:19:19
【问题描述】:
我创建了一个脚本来验证(大量)项目,它以串行方式(一个接一个)进行验证,脚本的最终结果大约需要 9 小时才能完成。环顾如何改进这一点,我发现 GNU 并行,但我在使它工作时遇到了问题。
项目列表在一个文本文件中,所以我正在执行以下操作:
readarray items < ${ALL_ITEMS}
export -f process_item
parallel process_item ::: "${items[@]}"
问题是,我收到一个错误:
GNU parallel: Argument list too long
通过查看类似的帖子 1、2、3,我了解到这更多是 Linux 的限制,而不是 GNU 并行。从这些帖子的答案中,我还尝试通过将项目传递给 head 来推断解决方法,但结果是只有少数项目(传递给 head 的参数)是已处理。
我已经能够使用 xargs 使其工作:
cat "${ALL_ITEMS}" | xargs -n 1 -P ${THREADS} -I {} bash -c 'process_item "$@"' _ {}
但我发现 GNU 并行 还有其他我想使用的好功能。
知道如何使用 GNU 并行 进行这项工作吗?顺便说一句,项目的数量约为 250 万,并且每天都在增长(脚本作为 cron 作业运行)。
谢谢
【问题讨论】:
标签: bash gnu-parallel