linux进程中的作业池使用php进程进行bash

时间:2014-07-14 07:57:57

标签: php bash parallel-processing

我需要在同一bash-script进程的php中拥有一个池。该池必须包含10个进程,并且只要在池中完成作业,就必须启动一个新进程,以便始终并行运行10个进程。我真的很喜欢bash脚本,所以我需要一些帮助才能开始。

谢谢...

2 个答案:

答案 0 :(得分:2)

使用文档here查看GNU Parallel - here

要执行您想要的操作,您可以创建一个包含作业队列的文件,最初为空:

# Clear queue out
> jobqueue

然后你可以开始处理工作,一次不超过10个:

tail -f jobqueue | parallel -j 10

然后你进入另一个终端窗口,但是在同一个目录中并提交这样的工作:

echo "sleep 5;date" >> jobqueue

或者,如果你的工作是PHP脚本,也许你会做这样的事情:

echo "./myscript.php" >> jobqueue

或者,您可以提交40个这样的工作:

for i in {1..40}; do echo "sleep 5;date +'%H:%M:%S Job $i'"; done >> jobqueue

或者,完全不同的建议,如果您已经有一个已知的1000个作业列表的文件,您可以忘记我上面建议的作业队列文件,并将它们全部一起提交到10这样的时间:

parallel -j 10 < joblist.txt

答案 1 :(得分:0)

如果您不想使用parallel,可以尝试以下方式:

# loop ...
if [[ $(jobs -p|wc -l) -ge 10 ]]; the
    wait "$(jobs -p|head -1)" || echo "Job ended with failure"
fi
./your_script &
# end loop ...