Perl * Распараллелить закачку
Как распараллелить закачку?
Код:
# словарь сайтов
$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);
|
Не:
Цитата:
Аргументом функции system может быть все, что пригодно для передачи в /bin/sh, поэтому можно задавать сразу несколько команд, разделяя их точками с запятой или символами новой строки. Процесси, после которих указан символ &, запускаются, но программа не ждет их завершення, т.е. в данном случае все происходит аналогично тому, как если бы вы ввели в shell строку, которая заканчивается символом &.
|
?!
|
Попробовал следующий способ.
Код:
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/...n-perl-part-2/
|
Время: 21:31.
© OSzone.net 2001-