use strict;
use threads;
use Data::Dumper;
use Thread::Queue;
warn "Using threads $threads::VERSION";
warn "Using Thread::Queue $Thread::Queue::VERSION";
my $THREADS = 2;
my %dataEntity;
while(<>){
chomp;
next if !length($_);
my ($dsName,$passwd) = split /\|/, $_;
$dataEntity{$dsName} = $passwd;
}
my $request = Thread::Queue->new;
my $response = Thread::Queue->new;
# Submit all requests
for my $dbname (keys %dataEntity) {
$request->enqueue([$dbname,$dataEntity{$dbname}]);
};
sub getConn {};
# Tell each thread that we're done
for (1..$THREADS) {
$request->enqueue(undef);
};
# Launch our threads
for (1..$THREADS) {
async(\&getData);
};
sub getData {
my $idx = 1;
while (my $job = $request->dequeue()) {
my ($dbname, $credentials) = @$job;
#connect to DB, retrieve information
my $dbh = getConn($dbname,$credentials);
my %results;
#my $resArrRef = $dbh->selectall_arrayref("select srvname,dbna
+me from syslogins",{ Slice => {} });
# package some dummy results
my $resArrRef = [
{ srvname => "server:$dbname:".$idx++, dbname => $dbname,
+},
{ srvname => "server:$dbname:".$idx++, dbname => $dbname,
+},
{ srvname => "server:$dbname:".$idx++, dbname => $dbname,
+},
{ srvname => "server:$dbname:".$idx++, dbname => $dbname,
+},
];
foreach my $row ( @$resArrRef ) {
$results{$row->{srvname}} = $row->{dbname};
}
$response->enqueue(\%results);
};
# tell our main thread we're done
$response->enqueue( undef );
};
while ($THREADS) {
while (my $payload = $response->dequeue()) {
print Dumper $payload;
};
$THREADS--
};
Output
Using threads 1.73 at tmp.pl line 6.
Using Thread::Queue 2.11 at tmp.pl line 7.
qwe
asd
yxc
zui
jjj
^Z
$VAR1 = {
'server:asd:4' => 'asd',
'server:asd:2' => 'asd',
'server:asd:1' => 'asd',
'server:asd:3' => 'asd'
};
$VAR1 = {
'server:zui:5' => 'zui',
'server:zui:7' => 'zui',
'server:zui:8' => 'zui',
'server:zui:6' => 'zui'
};
$VAR1 = {
'server:jjj:9' => 'jjj',
'server:jjj:11' => 'jjj',
'server:jjj:10' => 'jjj',
'server:jjj:12' => 'jjj'
};
$VAR1 = {
'server:yxc:14' => 'yxc',
'server:yxc:15' => 'yxc',
'server:yxc:13' => 'yxc',
'server:yxc:16' => 'yxc'
};
$VAR1 = {
'server:qwe:18' => 'qwe',
'server:qwe:19' => 'qwe',
'server:qwe:20' => 'qwe',
'server:qwe:17' => 'qwe'
};
Perl exited with active threads:
0 running and unjoined
2 finished and unjoined
0 running and detached
|