我正在尝试运行一个 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) 我有我想要调用的 shell 命令列表。最多可同时运行四个进程。
一旦进程计数低于 4,下一个命令就会发送到 shell,直到所有命令完成。
我已经从 stackoverflow 的同事那里得到了一个“部分”工作的解决方案,但是它依赖于 wait -n,这在我的 debian wheezy 安装中不可用。
一个人提到了 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) 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.out和file2.out。
将每个作业重定向到不同文件的正确方法是什么?
进一步失败的测试:
parallel --files file{}.out "./ClientesActivos-AP-N.sh -t 15" ::: $(seq 0 2)
Run Code Online (Sandbox Code Playgroud) 我正在使用 GNU parallel 并行运行多个作业。
我想知道 GNU parallel 是否包含一个命令,该命令允许向已经并行运行的进程添加 n 个更多内核。
你有什么建议吗?
我正在尝试使用 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 在 GPU 上运行一些数值计算任务。一般来说,这是我最初的方法:
这就提出了以下问题:
我正在尝试在 bash 中使用 GNU parallel 并行运行程序的多个实例,每个实例都有不同的参数。此外,我希望能够从文件中读取这些参数,并让脚本等待所有并行化作业完成。GNU 并行的parallel --semaphore,又名sem,似乎是一种简单的方法来做到这一点。
使用修改后的版本基本的例子从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 -a input --colsep ' ' --jobs 100 -I {} sed -i 's/{1}/{2}/g' file
input 是一个由空格分隔的文件,其中第一列是模式,第二列是替换。
问题是,在我运行命令后,并非所有模式都在file. 然后我再次运行相同的命令,替换了更多模式,但仍然不是全部。但是,如果我将--jobs100更改为--jobs 1,它将按预期工作(但速度要慢得多)。
我的命令中是否缺少必要的参数?
我正在尝试使用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_a或param_b一切工作正常.所以我检查了$ PATH变量并发现如果我remote-machine使用GNU parallel 运行一些东西,它看起来像PATH=/usr/bin:/bin:/usr/sbin:/sbin.如果我直接从机器上运行它也是/local/bin/git.
为什么会这样,如何克服?
提前致谢
我想在传递给的命令中分配一个变量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)
当然,这只是一个玩具示例。在真实的示例中,我想对该变量执行其他操作。
我有一个 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)