-6ren">
gpt4 book ai didi

bash - 在管道中使用 GNU 并行

转载 作者:行者123 更新时间:2023-12-04 04:36:53 25 4
gpt4 key购买 nike

从文件读取时,运行以下命令执行我想要的操作:

parallel --gnu -j2 "echo {} && sleep 5" < myfile.txt

我想用管道做类似的事情。请注意,我使用以下页面为管道读写器提供灵感: http://www.linuxjournal.com/content/using-named-pipes-fifos-bash

这是我的管道读取器文件:
#!/bin/bash

pipe=/tmp/testpipe

trap "rm -f $pipe" EXIT

if [[ ! -p $pipe ]]; then
mkfifo $pipe
fi

while true
do
parallel --gnu -j2 "echo {} && sleep 5" <$pipe
done

echo "Reader exiting"

这是我的作家:
#!/bin/bash

pipe=/tmp/testpipe

if [[ ! -p $pipe ]]; then
echo "Reader not running"
exit 1
fi


if [[ "$1" ]]; then
echo "$1" >$pipe
else
echo "Hello from $$" >$pipe
fi

然后我多次运行 pipeWriter,例如
$ ./pipeWriter one
$ ./pipeWriter two
$ ./pipeWriter three
$ ./pipeWriter four
$ ./pipeWriter five
$ ./pipeWriter six
$ ./pipeWriter seven
$ ./pipeWriter eight
$ ./pipeWriter nine
$ ./pipeWriter ten
$ ./pipeWriter ww
$ ./pipeWriter wwdfsdf
$ ./pipeWriter wwdfsdfsddfsd
$ ./pipeWriter testAgain

运行 pipeReader 的 shell 显示:
$ ./pipeReader 
one
four
eight
ww
testAgain

首先,存在数据缺失的问题。其次,parallel 在管道中似乎并没有并行运行。我希望它一次运行两个作业(或者更确切地说,最多两个作业。如果它只有一个工作,那很好,如果另一个它可以启动它)。

我哪里错了?

最佳答案

我无法解释丢失的数据,当我运行它时,我没有得到丢失的数据。但是,我可以解释为什么您看不到并行运行的作业:您的 while阅读器中的 -loop 只能将一个参数传递给 parallel .

使用文件代替管道,如 http://www.gnu.org/software/parallel/man.html#example__gnu_parallel_as_queue_system_batch_manager 中所述

也许你也可以使用 cat :

while true
do
cat $pipe
done | parallel --gnu -j2 "echo {} && sleep 5"

如果您还没有这样做,请完成本教程;你的命令行会喜欢你的: http://www.gnu.org/software/parallel/parallel_tutorial.html

关于bash - 在管道中使用 GNU 并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19615380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com