среда, 2 декабря 2009 г.

Perl Threads многопоточность

UPD: Продолжение тут - http://www.k4route.ru/2012/05/perl-threads-queue.html
Имеется много хостов. Периодически нужно цеплятся к каждому и вытягивать какой-нить принтаут или просто давать какаю-нить команду, да так, чтоб одновременно. Множить скрипты? Нужно использовать многопоточность! Начал гуглить. Perl, нити :) Нити-нити! :) Много инфы, мануалы на английском... не очень понятно... разбираюсь... Очередная ссылка, попадая на блог, где чел прям совсем доступно рассказывает про эти самые нити. С базовым пониманием уже можно приступать к изучению крутых мануалов. Собственно ссылко http://nopox.wordpress.com/2007/11/06/multithreading-in-perl-part-2/

И первая моя прога с нитями. Цепляется к массиву хостов по телнет, вытягивает принтаут комманды date.


use threads; #Подключаем модуль нитей
use Net::Telnet; #Модуль Telnet

@sgsns=('172.26.18.163', '172.26.18.164', '172.26.18.165', '172.26.18.166');

$login="log";
$password="pass";


#Создаём столько нитей, сколько у нас элементов в массиве @sgsns

for ($i=0; $i<=$#sgsns; $i++) {
push @threads, threads->create(\&sub1, $sgsns[$i], $login, $password)
}

foreach $thread (@threads) {
$thread->join(); #Сообщаем главной программе,
} #чтоб дожидалась выполнения нити

sub sub1 {
my @InboundParameters = @_;

my $host = $InboundParameters[0];
my $login = $InboundParameters[1];
my $password = $InboundParameters[2];

my $fd=new Net::Telnet (Timeout => 30 , Prompt => '/[\$%#>] $/');

$fd->open($host);
$fd->login($login,$password);

my @lines1=$fd->cmd("date");
print "$host\: @lines1";
print "\n";

}

Комментариев нет:

Отправить комментарий