- 论坛徽章:
- 0
|
各位好
今天在用模块Parallel::ForkManager进行测试时出现了一个问题。
测试内容
从一个有20200记录的数据库表读出数据,并将数据写入一个文件 。
问题
Parallel::ForkManager( 10)和Parallel::ForkManager( 40); 的耗时基本一致
代码如下:
use strict;
use warnings;
use Parallel::ForkManager;
use LWP::Simple;
use DBI;
##----------返回数据库连接句柄----------
sub GetDBConnect()
{
my ($db_name,$db_user,$db_pwd,$db_type,$db_srv,$db_port) = @_;
my $dbh;
my $con_type;
$db_type=lc($db_type);
if(not defined($db_type)){
$con_type = "Oracle";
}elsif($db_type eq 'mssql'){
$con_type = "ODBC";
}elsif($db_type eq 'sybase'){
$con_type = "Sybase";
}elsif($db_type eq 'oracle'){
$con_type = "Oracle";
}elsif($db_type eq 'odbc'){
$con_type = "ODBC";
}
if ($db_type eq ''){
$db_type="Oracle";
}
my $conStr = "dbi:"."$con_type"." db_name";
DBI->trace(0);
if ($db_type eq 'sybase'){
$dbh = DBI->connect("dbi con_type:host=$db_srv;port=$db_port;database=$db_name",$db_user,$db_pwd,{ AutoCommit => 1, PrintError => 1, RaiseError => 0 }) or return 999901;
}else{
$dbh = DBI->connect("$conStr",$db_user,$db_pwd,{ AutoCommit => 1, PrintError => 1, RaiseError => 0 } ) or return 999901;
}
return $dbh;
}
my $sql_str=qq(select BZ,ZHEN,CUN,PC,SFZ,NSFZ from match_20120428 );
my $dbh=&GetDBConnect('orcl','schdl_user','schdl_user','oracle','127.0.0.1','1521');
my $sth=$dbh->prepare($sql_str);
$sth->execute() ;
my $max_process = 40;#####一开始用10,写入文件耗时8分多点,改成40之后,耗时依然是8分多点
my $pm = new Parallel::ForkManager( $max_process );
open TXT,">45.txt" ;
while (my @ref = $sth->fetchrow_array()){
chomp (@ref);
$pm->start and next;
print TXT $ref[0].":".$ref[1].":".$ref[2].":".$ref[3].":".$ref[4].":".$ref[5]."\n" ;
$pm->finish;
}
close(TXT);
$pm->wait_all_children; ###
print "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" ;
各位大拿给个指点 。
谢谢 |
|