PDA

Показать полную графическую версию : Perl * Распараллелить закачку


mrcnn
22-05-2015, 17:56
Как распараллелить закачку?


# словарь сайтов

$i = 'a';

$fl="E:/Perl/bin/";

sub r
{
$i++;
print $_[0];
print "\n";

$link= "http://$i.ru";
$fl2 = $fl . $i . ".ru.htm";
system("lwp-download $link $fl2");

$link= "http://$i.net";
$fl2 = $fl . $i . "net.htm";
system("lwp-download $link $fl2");

$link= "http://$i.org";
$fl2 = $fl . $i . "org.htm";
system("lwp-download $link $fl2");

$link= "http://$i.com";
$fl2 = $fl . $i . "com.htm";
system("lwp-download $link $fl2");

r($i);
}

r($i);

Iska
22-05-2015, 21:13
Не:Аргументом функции system может быть все, что пригодно для передачи в /bin/sh, поэтому можно задавать сразу несколько команд, разделяя их точками с запятой или символами новой строки. Процесси, после которих указан символ &, запускаются, но программа не ждет их завершення, т.е. в данном случае все происходит аналогично тому, как если бы вы ввели в shell строку, которая заканчивается символом &.
?!

mrcnn
23-05-2015, 07:18
Попробовал следующий способ.


use threads;

# словарь сайтов

$i = 'sr';

$fl="E:/Perl/bin/";

sub t1
{
my ($i) = @_;
$link= "http://$i.ru";
$fl2 = $fl . $i . ".ru.htm";
system("lwp-download $link $fl2");
}

sub t2
{
my ($i) = @_;
$link= "http://$i.net";
$fl2 = $fl . $i . "net.htm";
system("lwp-download $link $fl2");
}

sub t3
{
my ($arg) = @_;
$link= "http://$i.org";
$fl2 = $fl . $i . "org.htm";
system("lwp-download $link $fl2");
}


sub t4
{
my ($arg) = @_;
$link= "http://$i.com";
$fl2 = $fl . $i . "com.htm";
system("lwp-download $link $fl2");
}


sub r
{
$i++;
print $_[0]."\n";

threads->new(\&t1, $i);
threads->new(\&t2, $i);
threads->new(\&t3, $i);
threads->new(\&t4, $i);

sleep 30;

r($i);
}

r($i);



https://nopox.wordpress.com/2007/11/06/multithreading-in-perl-part-2/




© OSzone.net 2001-2012