gnu并行:调用函数时的参数列表太长



我创建了一个脚本来验证(大(项目,并且它以串行方式(一个接一个(进行验证,并以脚本大约9的最终结果进行验证几个小时要完成。环顾四周如何改善这一点,我发现了 gnu并行,但我遇到了问题。

项目列表在文本文件中,所以我正在执行以下操作:

readarray items < ${ALL_ITEMS}
export -f process_item
parallel process_item ::: "${items[@]}"

问题是,我收到一个错误:

GNU parallel: Argument list too long

我通过查看类似的帖子1、2、3了解,这比a gnu Parallel 一个更重要。从这些帖子的答案中,我还尝试通过将项目输送到 head 来推断解决方法,但结果是只有少数项目(传递给 head 的参数(是处理。

我已经能够使用 xargs

使它起作用
cat "${ALL_ITEMS}" | xargs -n 1 -P ${THREADS} -I {} bash -c 'process_item "$@"' _ {}

,但我已经看到 gnu Parallel 还有我想使用的其他不错的功能。

有什么想法如何通过 gnu Parallel 使此工作?顺便说一句,项目数量约为250万,每天都在增长(脚本作为Cron工作(。

谢谢

来自 man parallel

parallel [options] [command [arguments]] < list_of_arguments

so:

export -f process_item
parallel process_item < ${ALL_ITEMS}

可能会做您想要的。

您可以将文件管传送到并行,也可以使用-a(--arg-file(选项。以下是等效的:

cat "${ALL_ITEMS}" | parallel process_item 
parallel process_item < "${ALL_ITEMS}"
parallel -a "${ALL_ITEMS}" process_item
parallel --arg-file "${ALL_ITEMS}" process_item
parallel process_item :::: "${ALL_ITEMS}"

相关内容

  • 没有找到相关文章

最新更新