GNU Parallel替换管道xargs -n 1

时间:2014-05-29 20:27:48

标签: python bash parallel-processing xargs

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

正常通话是......

$ mypy.py "AK"

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

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

$ cat statelist.txt | xargs -n 1 ./mypy.py

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

$ find . -name '*.html' | parallel gzip --best

所以,我的尝试是

$ cat statelist.txt | parallel python mypy.py

$ cat statelist.txt | parallel python mypy.py {}

但这两个都在回归:

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

似乎也许是在没有引用它的情况下传递它?但是,当我在“{}”中添加引号时,它会传入一个文字“{}”。

1 个答案:

答案 0 :(得分:3)

cat statelist.txt | parallel --gnu python mypy.py 

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

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