作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对驼鹿还是个新手,但它让我流口水了!下面是我想做的事情的简化版本:生成可用于运行外部程序的对象相关输入文件。这些外部程序的计算量可能很大,我会多次将输出处理回对象,每次处理多个对象(作为一些外部参数调整的函数)。下面的模块有效(我认为),但可能有更好/更清洁的方法来做到这一点。这样做的正确方法是什么?由于所有这些对象都生活在它们自己的小世界中,似乎我应该能够并行运行这些对象的批处理以有效地筛选对象集合。对此有任何提示!??
{
package input_genrun;
use Moose;
use IO::Pipe;
use FileHandle;
has 'name', is => 'ro', isa =>'Str';
has 'exe' => (
is => 'ro',
isa => 'Str',
default => '/usr/local/bin/bar',
);
has 'inp_fh' => (
is => 'rw',
isa=> 'FileHandle',
default => sub {
my $handle = FileHandle->new;
return $handle;
}
);
has 'out_fh' => (
is => 'rw',
isa=> 'IO::Pipe',
default => sub {
my $handle = IO::Pipe->new;
return $handle;
}
);
sub inp_wrt
{
my ($self,$object) = @_;
my $filename = $object->name() . ".inp";
my $fh = FileHandle->new;
$fh->open(">" . $filename);
print $fh "foo \n";
print $fh "bar \n";
$fh->close;
}
sub run
{
my ($self, $object) = @_;
my $name = $object->name() . ".inp";
my $exe = $self->exe;
my $command = $self->exe . " $name";
$self->out_fh()->reader($command);
return($self->out_fh());
}
}
my $l = input_genrun->new(name=> 'foo_l',exe=> 'wc');
my $m = input_genrun->new(name=> 'foo_m',exe=> 'cat');
my $n = input_genrun->new(name=> 'foo_n',exe=> 'tac');
$l->inp_wrt($l);
$m->inp_wrt($m);
$n->inp_wrt($n);
my $pipe_l = $l->run($l);
my $pipe_m = $m->run($m);
my $pipe_n = $n->run($n);
while (<$pipe_l>){
print "from_l: $_";
}
while (<$pipe_m>){
print "from_m: $_";
}
while (<$pipe_n>){
print "from_n: $_";
}
最佳答案
我首先看一下 MooseX::Workers
,它围绕 POE::Wheel::Run
进行抽象以解决同样的问题。如果失败,我会查看其他一些异步作业处理程序(Parallel::Fork
、Proc::Simple::Async
、Gearman
等),然后再真正解决实现轮子的问题。
如果不出意外,他们会让您很好地了解之前在这个领域所做的事情。
关于perl - 如何用驼鹿正确打开管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6587698/
我是一名优秀的程序员,十分优秀!