GNU Parallel 替换管道 xargs -n 1

Mit*_*ops 2 python parallel-processing bash xargs

我有一个 python 脚本,它对状态缩写列表作为其单个参数进行操作,还有一个包含所有状态缩写字符串的文本文件。

正常的通话是...

$ mypy.py "AK"
Run Code Online (Sandbox Code Playgroud)

...在阿拉斯加运行脚本。

我目前正在使用以下命令对从 statelist.txt 文件中获取的每个州缩写运行脚本:

$ cat statelist.txt | xargs -n 1 ./mypy.py
Run Code Online (Sandbox Code Playgroud)

我现在想要并行执行,GNU Parallels 看起来是正确的选择。我从这里看到这应该是替换的语法xargs -n1

$ find . -name '*.html' | parallel gzip --best
Run Code Online (Sandbox Code Playgroud)

所以,我的尝试是

$ cat statelist.txt | parallel python mypy.py
Run Code Online (Sandbox Code Playgroud)

$ cat statelist.txt | parallel python mypy.py {}
Run Code Online (Sandbox Code Playgroud)

但这两者都正在回归:

/bin/bash: mypy.py: command not found
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'AK' is not defined
Run Code Online (Sandbox Code Playgroud)

似乎是在不加引号的情况下传递它?但是当我向“{}”添加引号时,它会传入文字“{}”。

tha*_*guy 6

cat statelist.txt | parallel --gnu python mypy.py 
Run Code Online (Sandbox Code Playgroud)

如果没有--gnu,GNU 并行可能会选择模拟同名的旧工具(Tollef 的并行)。--tollef是许多发行版上的默认行为,也是有效的 GNU 样式调用失败的原因。

PS:您可能也xargs有并行化-C-P并行化。

  • 对于未来的访问者:“因此,为了减少挫败感和由此产生的支持,--tollef 已被废弃 [2013 年 2 月 22 日],并在一年后被删除。” - https://www.gnu.org/software/parallel/parallel_design.html#tollef (2认同)