【发布时间】:2015-05-08 11:02:22
【问题描述】:
我有一个更新数据库的非常简单的任务。
my $pm = new Parallel::ForkManager(15);
for my $line (@lines){
my $pid = $pm->start and next;
my $dbh2 = $dbh->clone();
my $sth2 = $dbh2->prepare("update db1 set field1=? where field2 =?");
my ($field1, $field2) = very_slow_subroutine();
$sth2->execute($field1,$field2);
$pm->finish;
}
$pm->wait_all_children;
我可以只使用 $dbh2->do,但我怀疑它是缓慢的原因。
有趣的是,这 15 个进程(或我指定的任何进程)的启动速度似乎非常快,但之后速度急剧下降,仍然比没有分叉的速度更快,但我期待更多......
编辑:
very_slow_subroutine 是从 Web 服务获取答案的子程序。该服务可以响应从几分之一秒到几秒的超时时间。我要问几十万次……我想做叉子的原因。
如果这很重要——我在 Linux 上。
【问题讨论】:
-
您可能需要发布/重构
very_slow_subroutine以获得更快的速度。
标签: performance perl dbi fork