【发布时间】:2018-04-08 07:22:56
【问题描述】:
我正在尝试并行运行多个子例程(从外部系统获取数据)。为了模拟,我在下面的示例中使用sleep。我的问题是:如何在 Mojolicious 中实现这一点?
#!/usr/bin/perl
use Mojolicious::Lite;
use Benchmark qw(:hireswallclock);
sub add1 { my $a = shift; sleep 1; return $a+1; }
sub mult2 { my $b = shift; sleep 1; return $b*2; }
sub power { my ($x, $y) = @_; sleep 1; return $x ** $y; }
any '/' => sub {
my ( $self ) = @_;
my $n = int(rand(5));
my $t0 = Benchmark->new;
my $x = mult2($n); # Need to run in parallel
my $y = add1($n); # Need to run in parallel
my $z = power($x,$y);
my $t1 = Benchmark->new;
my $t = timediff($t1,$t0)->real();
$self->render(text => "n=$n, x=$x, y=$y, z=$z;<br>T=$t seconds");
};
app->start;
换句话说,我想通过并行运行 (add1 & mult2) 将运行时间减少到 2 秒(而不是 3 秒)。
这个thread 使用了Mojo::IOLoop->timer,这在我的情况下似乎不相关?如果是这样,我不知道如何使用它。谢谢!
【问题讨论】:
标签: multithreading perl web-services parallel-processing mojolicious