Вот такой код получился, но считает он все равно по 1 запросу, как будто тредов и нет. подскажите, где я ошибся?
| Код | #!/usr/bin/perl
use threads; use strict; use Switch; use Net::SNMP; use Thread::Queue; use DBI;
my $b_ip : shared; my $b_oid : shared; my @mas_ip : shared; my @mas_id_mod : shared; my @users=0..31; my @thread; my @globx : shared;
my $dbh = DBI->connect("DBI:Pg:dbname=postgres;host=host", "login", "passwd") || die $DBI::errstr;
my $query = "SELECT switch_map.switch_place2.ip_address, switch_map.models.id FROM switch_map.switch_place2, switch_map.sw_warehouse, switch_map.models WHERE (switch_map.switch_place2.sw_id = switch_map.sw_warehouse.id) AND (switch_map.sw_warehouse.model_id = switch_map.models.id) AND (switch_map.models.id IN (1,2,3,7,15));";
my $output = $dbh->prepare($query); $output->execute; my ($b_ip, $id_mod); $output->bind_columns(undef, \($b_ip, $id_mod));
while ($output->fetch) { push @mas_ip, $b_ip; push @mas_id_mod, $id_mod; }
for (my $j=0; $j<$#mas_ip; $j++){ foreach(@users) { if ($j<$#mas_ip){ switch($mas_id_mod[$j]){ case 1 {$b_oid = "1.3.6.1.4.1.171.11.64.1.2.10.5.1.4";} case 2 {$b_oid = "1.3.6.1.4.1.171.11.63.6.2.7.11.1.4";} case 3 {$b_oid = "1.3.6.1.4.1.171.11.63.3.2.7.5.1.4";} case 7 {$b_oid = "1.3.6.1.4.1.171.11.63.6.2.7.11.1.4";} case 15 {$b_oid = "1.3.6.1.4.1.171.12.73.3.1.3.1.2";} } $b_ip = $mas_ip[$j]; $globx[$_] = Thread::Queue->new; $thread[$_] = threads->create(\&kar, $b_ip, $b_oid)->join; $j++; } }
foreach (@users){ if ($j<$#mas_ip){ switch($mas_id_mod[$j]){ case 1 {$b_oid = "1.3.6.1.4.1.171.11.64.1.2.10.5.1.4";} case 2 {$b_oid = "1.3.6.1.4.1.171.11.63.6.2.7.11.1.4";} case 3 {$b_oid = "1.3.6.1.4.1.171.11.63.3.2.7.5.1.4";} case 7 {$b_oid = "1.3.6.1.4.1.171.11.63.6.2.7.11.1.4";} case 15 {$b_oid = "1.3.6.1.4.1.171.12.73.3.1.3.1.2";} } $b_ip = $mas_ip[$j]; if ($globx[$_]->pending eq 0) { $globx[$_]->enqueue(-1); $thread[$_] = threads->create(\&kar, $b_ip, $b_oid)->join; $j++; } } } }
sub kar { # Тут расположена сама функция, треды в ней не участвуют }
|
|