bash – 如何向GNU Parallel提供大量命令?
我正在评估
GNU Parallel是否可用于并行搜索存储在系统上的文件.系统中每年的每一天(doy)只能有一个文件(因此每年最多366个文件).假设系统上有3660个文件(大约10年的数据).该系统可以是多CPU多核Linux或多CPU Solaris.
我正在存储搜索命令以在数组中的文件上运行(每个文件一个命令).这就是我现在正在做的事情(使用bash)但是我无法控制并行启动的搜索次数(绝对不想一次启动所有3660次搜索): #!/usr/bin/env bash declare -a cmds declare -i cmd_ctr=0 while [[ <condition> ]]; do if [[ -s $cur_archive_path/log.${doy_ctr} ]]; then cmds[$cmd_ctr]="<cmd_to_run>" let cmd_ctr++ fi done declare -i arr_len=${#cmds[@]} for (( i=0; i<${arr_len}; i++ )); do # Get the command and run it in background eval ${cmds[$i]} & done wait 如果我使用
https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Using-shell-variables说:
parallel echo ::: "${V[@]}" 你不想要回声,所以: parallel ::: "${cmds[@]}" 如果你不需要其他任何内容的$cmds,那么使用’sem'(这是并行的别名–semaphore)https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Working-as-mutex-and-counting-semaphore while [[ <condition> ]]; do if [[ -s $cur_archive_path/log.${doy_ctr} ]]; then sem -j+0 <cmd_to_run> fi done sem --wait 你还没有描述什么< condition>可能.如果你只是做一个类似for循环的东西,你可以用以下代码替换整个脚本: parallel 'if [ -s {} ] ; then cmd_to_run {}; fi' ::: $cur_archive_path/log.{1..3660} (基于https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Composed-commands). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- WebService调用C++dll在XP下IIS5.1发布问题
- 详解BootStrap中Affix控件的使用及保持布局的美观的方法
- Angular2 PrimeNG – 当底层数据发生变化时如何重置dataTab
- angular – 为什么@NgModule中的“bootstrap”键是一个数组
- MQTT服务-Mosquitto简单安装及TLS双向认证配置
- twitter-bootstrap – Bootstrap 4 – 我不希望列具有相同的
- 如何通过Scala / Java方法中的反射获取参数名称和类型?
- AXIS调用jws发布的webservice出现Cannot find dispatch met
- angularjs – 清除历史记录和登录/注销使用Ionic框架重新加
- angular2应用程序中的Karma测试异常