|
|
1
14
可以将命令列表转换为makefile吗?如果是这样,您可以运行“make-j x”。 |
|
2
9
GNU并行 http://www.gnu.org/software/parallel/ 是一种比PPS更通用的并行化工具。 如果runfile包含:
你可以做到:
每个CPU核心运行一个命令。 如果您的命令如上所述简单,您甚至不需要runfile,但可以:
如果您有更多的计算机可以进行处理,那么您可能需要查看GNU Parallel的--sshlogin和--trc选项。 |
|
4
0
不管怎样,这是一个有趣的问题。 这就是我要做的,假设 巴什(1) 当然。
所以现在,它是第一个
现在,这是一个需要处理许多工作的案例,这些工作被紧密地终止在一起。我 犯罪嫌疑人 您可以使用更简单的版本:
现在,这个命令将启动前15个命令,然后在某些命令终止时一次运行其余的命令。 |
|
|
5
0
|
|
|
6
0
你可以使用 参数代换 命令,其 ——马克斯普罗斯 做你想做的。例如,charlie martin解决方案与xargs结合使用:
细节:
我用这个mycommands.sh文件测试了它,例如:
|
|
|
7
0
这是一种特殊情况,但如果您试图处理一组文件并生成另一组输出文件,则可以启动核心进程数,并在处理之前检查输出文件是否存在。下面的示例将.m4b文件的目录转换为.mp3文件: 只需运行此命令多次,只要您有核心: ls*m4b_while read f;do test-f$f%m4b_mp3_mencoder-o f rawaudio“$f”-OAC mp3name-ovc copy-o$f%m4b_mp3;done& |
|
|
8
0
您可以在bash上看到我的任务队列: https://github.com/pavelpat/yastq |
|
|
9
0
任务队列+并行+动态添加 使用FIFO,该脚本将自身分叉以处理队列。这样,您就可以动态地向队列添加命令(当队列已经启动时)。 用法:/queue命令[of children][queue name] 示例,1个线程: ./queue "sleep 5; echo ONE" ./queue "echo TWO" 输出: ONE TWO 示例,使用2个线程: ./queue "sleep 5; echo ONE" 2 ./queue "echo TWO" 输出: TWO ONE 例如,有两个队列: ./queue "sleep 5; echo ONE queue1" 1 queue1 ./queue "sleep 3; echo ONE queue2" 1 queue2 输出: ONE queue2 ONE queue1 脚本(另存为“queue”和chmod+x queue):
#!/bin/bash
#Print usage
[[ $# -eq 0 ]] && echo Usage: $0 Command [# of children] [Queue name] && exit
#Param 1 - Command to execute
COMMAND="$1"
#Param 2 - Number of childs in parallel
MAXCHILD=1
[[ $# -gt 1 ]] && MAXCHILD="$2"
#Param 3 - File to be used as FIFO
FIFO="/tmp/defaultqueue"
[[ $# -gt 2 ]] && FIFO="$3"
#Number of seconds to keep the runner active when unused
TIMEOUT=5
runner(){
#Associate file descriptor 3 to the FIFO
exec 3"$FIFO"
while read -u 3 -t $TIMEOUT line; do
#max child check
while [ `jobs | grep Running | wc -l` -ge "$MAXCHILD" ]; do
sleep 1
done
#exec in backgroud
(eval "$line")&
done
rm $FIFO
}
writer(){
#fork if the runner is not running
lsof $FIFO >/dev/null || ($0 "QueueRunner" "$MAXCHILD" "$FIFO" &)
#send the command to the runner
echo "$COMMAND" > $FIFO
}
#Create the FIFO file
[[ -e "$FIFO" ]] || mkfifo "$FIFO"
#Start the runner if in the runner fork, else put the command in the queue
[[ "$COMMAND" == "QueueRunner" ]] && runner || writer
|