标签: gnu-parallel

如何将部分参数传递给 gnu 并行命令

我正在尝试运行一个 GNU 并行命令并向它传递一堆日期,就像这样,但是一个更复杂的命令:

parallel '/some/binary {}' ::: 20131017 20131018
Run Code Online (Sandbox Code Playgroud)

这有效,但是我需要日期跨越两个不同的月份,并且对于参数 20131018,命令应该如下所示:

'/some/binary 201310/20131018'
Run Code Online (Sandbox Code Playgroud)

所以它分裂了论点的第一部分..我怎样才能达到这个效果?我想象的 bash 变量方面的思考:

'/some/binary {:4}/{}' ::: 20130910 20131018 etc...
Run Code Online (Sandbox Code Playgroud)

parallel-processing bash gnu-parallel

2
推荐指数
1
解决办法
1271
查看次数

如何使用 GNU 并行运行命令列表,其中 4 个命令同时运行

我有我想要调用的 shell 命令列表。最多可同时运行四个进程。

一旦进程计数低于 4,下一个命令就会发送到 shell,直到所有命令完成。

我已经从 stackoverflow 的同事那里得到了一个“部分”工作的解决方案,但是它依赖于 wait -n,这在我的 debian wheezy 安装中不可用。

链接到其他 stackoverflow 问题

一个人提到了 GNU Parallel。这能实现吗?非常感谢任何指导!

nohup scrapy crawl urlMonitor -a slice=0 &
nohup scrapy crawl urlMonitor -a slice=1 &
nohup scrapy crawl urlMonitor -a slice=2 &
nohup scrapy crawl urlMonitor -a slice=3 &
nohup scrapy crawl urlMonitor -a slice=4 &
nohup scrapy crawl urlMonitor -a slice=5 &
nohup scrapy crawl urlMonitor -a slice=6 &
nohup scrapy crawl urlMonitor -a slice=7 &
nohup scrapy crawl urlMonitor …
Run Code Online (Sandbox Code Playgroud)

linux debian gnu gnu-parallel

2
推荐指数
1
解决办法
761
查看次数

GNU 并行:将每个作业输出到不同的文件而无需管道

This question与this other非常接近,但该答案对我无效,我认为由于我的shell脚本不适用于管道。

这是我的多任务命令:

parallel "./ClientesActivos-AP-N.sh -t 15" ::: $(seq 0 2)
Run Code Online (Sandbox Code Playgroud)

我想输出到类似的东西:

file0.out
file1.out
file2.out
Run Code Online (Sandbox Code Playgroud)

我不知道我应该把重定向器 放在哪里>

我已经测试过没有运气:

parallel ./ClientesActivos-AP-N.sh -t 15 ">" file{}.out ::: $(seq 0 1)
parallel ./ClientesActivos-AP-N.sh -t 15 ::: $(seq 0 1) ">" file{}.out
Run Code Online (Sandbox Code Playgroud)

我的脚本以这种方式工作:

./ClientesActivos-AP-N.sh -t 15 0
./ClientesActivos-AP-N.sh -t 15 1
./ClientesActivos-AP-N.sh -t 15 2
Run Code Online (Sandbox Code Playgroud)

所以输出会(对于上面的手动无与伦比的例子)到file0.out,file1.outfile2.out

每个作业重定向到不同文件的正确方法是什么?

进一步失败的测试:

parallel --files file{}.out "./ClientesActivos-AP-N.sh -t 15" ::: $(seq 0 2)
Run Code Online (Sandbox Code Playgroud)

gnu-parallel

2
推荐指数
1
解决办法
1151
查看次数

为 GNU 并行中的并行运行进程添加更多内核

我正在使用 GNU parallel 并行运行多个作业。

我想知道 GNU parallel 是否包含一个命令,该命令允许向已经并行运行的进程添加 n 个更多内核。

你有什么建议吗?

parallel-processing gnu-parallel

2
推荐指数
1
解决办法
769
查看次数

使用 --round-robin 将 GNU Parallel 输出到 stdout

我正在尝试使用 GNU Parallel 来帮助我处理一些我不想在本地保存的远程文件。

我的命令看起来有点像:

python list_files.py | \
  parallel -j5 'aws s3 cp s3://s3-bucket/{} -' | \
    parallel -j5 --round --pipe -l 5000 "python process_and_print.py"
Run Code Online (Sandbox Code Playgroud)

process_and_print.py打印某些输入行的输出,但该输出并没有像我预期的那样立即到达标准输出,而是在该过程完成后才看到输出。如果我删除--round参数,一切都按预期工作。

所有这些数据都保存在哪里?我有没有办法将它逐行打印到标准输出,而无需缓冲?

gnu-parallel

2
推荐指数
1
解决办法
1606
查看次数

GNU 并行和 GPU?

我有兴趣让 GNU Parallel 在 GPU 上运行一些数值计算任务。一般来说,这是我最初的方法:

  1. 编写任务以使用 OpenCL 或其他一些 GPU 接口库
  2. 在任务列表上调用GNU并行(我不确定是否需要这一步

这就提出了以下问题:

  1. 我的方法/用例是否受益于 GNU Parallel 的使用(即我是否应该在这里使用它)?
  2. GNU Parallel 是否提供了在 GPU 上并行运行任务的内置机制?
  3. 如果是这样,我该如何配置 GNU Parallel 来做到这一点?

gpu gnu-parallel

2
推荐指数
1
解决办法
1823
查看次数

sem --wait 在从文件读取的 while 循环后不等待

我正在尝试在 bash 中使用 GNU parallel 并行运行程序的多个实例,每个实例都有不同的参数。此外,我希望能够从文件中读取这些参数,并让脚本等待所有并行化作业完成。GNU 并行的parallel --semaphore,又名sem,似乎是一种简单的方法来做到这一点。

MCVE

使用修改后的版本基本的例子sem文档,我创建了一个最小的测试案例来说明我的问题:

while read i; do
    echo -n "$i "
    sem -j 4 "sleep $i && echo $i finished"
done < args.txt
echo
echo 'Started wait'
sem --wait
echo 'Done waiting'
Run Code Online (Sandbox Code Playgroud)

args.txt是一个仅包含以下内容的文件:

1
2
3
4
Run Code Online (Sandbox Code Playgroud)

预期与实际输出

我希望看到类似于以下内容的输出:

user@host:~$ ./test-sem.sh
1 2 3 4 
Started wait
1 finished
2 finished
3 finished
4 finished
Done waiting
Run Code Online (Sandbox Code Playgroud)

但是,令人惊讶的是,sem --wait实际上并没有等待任务完成,而是得到如下输出:

user@host:~$ ./test-sem.sh …
Run Code Online (Sandbox Code Playgroud)

parallel-processing bash gnu-parallel

2
推荐指数
1
解决办法
131
查看次数

sed 与并行 --jobs 选项的正确用法是什么?

parallel -a input --colsep ' ' --jobs 100 -I {} sed -i 's/{1}/{2}/g' file

input 是一个由空格分隔的文件,其中第一列是模式,第二列是替换。

问题是,在我运行命令后,并非所有模式都在file. 然后我再次运行相同的命令,替换了更多模式,但仍然不是全部。但是,如果我将--jobs100更改为--jobs 1,它将按预期工作(但速度要慢得多)。

我的命令中是否缺少必要的参数?

sed gnu-parallel

2
推荐指数
1
解决办法
37
查看次数

GNU并行更改PATH环境变量

我正在尝试使用GNU Parallel来在远程计算机上运行带有多个参数的脚本.这看起来有点像:

parallel --onall -S remote-machine  /shared/location/script.sh ::: param_a param_b
Run Code Online (Sandbox Code Playgroud)

/shared/location/script.sh正在使用git.所以我得到这个错误:

git: command not found
Run Code Online (Sandbox Code Playgroud)

如果我登录remote-machine手动和运行/shared/location/script.sh使用param_aparam_b一切工作正常.所以我检查了$ PATH变量并发现如果我remote-machine使用GNU parallel 运行一些东西,它看起来像PATH=/usr/bin:/bin:/usr/sbin:/sbin.如果我直接从机器上运行它也是/local/bin/git.

为什么会这样,如何克服?

提前致谢

parallel-processing gnu environment-variables gnu-parallel

1
推荐指数
1
解决办法
639
查看次数

如何在gnu并行中分配变量?

我想在传递给的命令中分配一个变量parallel

parallel "my_variable={}_33; echo $my_variable" ::: a b c
Run Code Online (Sandbox Code Playgroud)

输出应为:

# a_33
# b_33
# c_33
Run Code Online (Sandbox Code Playgroud)

当然,这只是一个玩具示例。在真实的示例中,我想对该变量执行其他操作。

variable-assignment gnu-parallel

1
推荐指数
1
解决办法
1406
查看次数

python脚本的并行处理

我有一个 python 脚本,它一次接受一个输入并处理它。我想同时使用不同的输入并行运行脚本。类似于 50 或 100 次,但使用来自 txt 文件的不同输入源。

我执行如下脚本:

python script.py -d url1 
Run Code Online (Sandbox Code Playgroud)

然后

python script.py -d url2
Run Code Online (Sandbox Code Playgroud)

然后

python script.py -d url3
Run Code Online (Sandbox Code Playgroud)

我不想一次输入一个参数,而是想从文本文件中提供这些 url 并并行处理它们。

我尝试使用 gnu-parallel 在 bash shell 中运行此脚本,但 bash 脚本不运行 python shell,因此出现错误。

代码如下---

#!/usr/bin/env bash
doit() {
    host="$1"
    ~/script/python script1.py -d $host
      }
   export -f doit

   cat "$1" | parallel -j50 -k doit 
Run Code Online (Sandbox Code Playgroud)

txt文件的内容---

url1.com
url2.com
url3.com
--------
url1000.com
url_any.com
Run Code Online (Sandbox Code Playgroud)

python parallel-processing multiprocessing gnu-parallel

1
推荐指数
1
解决办法
4511
查看次数