Xpoint
   [напомнить пароль]

Непонятки с тредами

Метки: [без меток]
[удл]
2010-02-15 17:21:09 [обр] mkth+[досье]
Не могу никак добавить треды в код, очень прошу помочь истинным знатокам перла...
#!/usr/bin/perl

use HTTP::Daemon;
use LWP::UserAgent;
use Compress::Zlib;
use CGI::Carp qw(fatalsToBrowser);

my @ext = qw(x-gtar x-gzip x-tar zip image zip z gz tz taz tgz lzh arj arc tar cab wmz yfs wsz exe uu xxe bhx b64 hqx mim);
my $port = 8888;
$SIG{PIPE} = 'IGNORE';
my $server = HTTP::Daemon->new( LocalPort => $port ) or
die "Can't start server ($@)" unless defined $server;
  open(F, '<file.txt') || die $!;
  my @some = <F>;
  close F;
  my $now;
  my $i =1;
while (my $conn = $server->accept) {

$i++;
if(!$now){ $now = shift(@some);
              chomp($now);
              print"SET NEW X-Forwarded-For $now\n";}
              if($i>5)
              {
              $now = shift(@some);
              chomp($now);
                print"SET NEW X-Forwarded-For $now\n";
              $i=0;

              }

  while (my $request = $conn->get_request)
     {

    print "X-Forwarded-For - $now\n";
     my $ua = LWP::UserAgent->new;
     $ua->default_header('X-Forwarded-For' =>[$now]);
     $ua->max_size(7750);
           $conn->autoflush;
           $request -> remove_header('Proxy-Connection');
        $request -> remove_header('Keep-Alive');
        $request -> header(Connection=>'close');

           my $resp = $ua->simple_request($request);
           my $c_cont = $resp->content;
        if ( $resp->content_encoding || (grep { $_ =~ /$resp->content_type/g } @ext) || length($c_cont) < 3000 ) {
        $conn->send_response($resp);

        }
        else {
             $c_cont_zip = Compress::Zlib::memGzip($c_cont);
             $resp->content($c_cont_zip);
             $resp->content_encoding('gzip');
             $conn->send_response($resp);


}
     }
    print STDERR "Close: ", $conn->reason, "\n";
    $conn->close;
    undef $conn;

}
спустя 29 минут [обр] Dennis F. Latypoff aka funky_dennis(2/84)[досье]
Истинные знатоки перла используют отступы.
спустя 2 часа 29 минут [обр] Евгений Седов aka KPbIC(9/187)[досье]
спустя 16 минут [обр] Евгений Седов aka KPbIC(9/187)[досье]
спустя 15 минут [обр] mkth+[досье]
#!/usr/bin/perl

use HTTP::Daemon;
use LWP::UserAgent;
use Compress::Zlib;
use CGI::Carp qw(fatalsToBrowser);
use threads;

my @ext = qw(x-gtar x-gzip x-tar zip image zip z gz tz taz tgz lzh arj arc tar cab wmz yfs wsz exe uu xxe bhx b64 hqx mim);
my $port = 8888;
$SIG{PIPE} = 'IGNORE';
my $server = HTTP::Daemon->new( LocalPort => $port ) or
die "Can't start server ($@)" unless defined $server;
  open(F, '<file.txt') || die $!;
  my @some = <F>;
  close F;
  my $now;
  my $i =1;
while (my $conn = $server->accept) {

$i++;
if(!$now){ $now = shift(@some);
              chomp($now);
              print"SET NEW X-Forwarded-For $now\n";}
              if($i>14)
              {
              $now = shift(@some);
              chomp($now);
                print"SET NEW X-Forwarded-For $now\n";
              $i=0;
              my @thr;
             for (@some)
             {
            my $now = $_;

           chomp @some;
           if($thr[$i]) {threads->object($thr[$i]->tid())->join;}
           $thr[$i]=threads->create(\$now);

           $i=($i+1) % 4; #Количество потоков (1)

           }

           foreach(threads->list) { $_->join; }

           }

  while (my $request = $conn->get_request)
     {

    print "X-Forwarded-For - $now\n";
     my $ua = LWP::UserAgent->new;
     $ua->default_header('X-Forwarded-For' =>[$now]);
     $ua->max_size(7750);
           $conn->autoflush;
           $request -> remove_header('Proxy-Connection');
        $request -> remove_header('Keep-Alive');
        $request -> header(Connection=>'close');

           my $resp = $ua->simple_request($request);
           my $c_cont = $resp->content;
        if ( $resp->content_encoding || (grep { $_ =~ /$resp->content_type/g } @ext) || length($c_cont) < 3000 ) {
        $conn->send_response($resp);

        }
        else {
             $c_cont_zip = Compress::Zlib::memGzip($c_cont);
             $resp->content($c_cont_zip);
             $resp->content_encoding('gzip');
             $conn->send_response($resp);


}
     }
    print STDERR "Close: ", $conn->reason, "\n";
    $conn->close;
    undef $conn;

}
Прошу взглянуть, что не так? При 1 потоке все прет, когда ставишь больше, вываливаются ошибки...
спустя 37 минут [обр] Евгений Седов aka KPbIC(9/187)[досье]
mkth[досье]
  1. Как правильно задавать вопросы
  2. Форматируйте код по-человечески (вам уже говорили)
спустя 36 минут [обр] mkth+[досье]
сообщение промодерировано
use HTTP::Daemon;
use LWP::UserAgent;
use Compress::Zlib;
use CGI::Carp qw(fatalsToBrowser);
use threads;

my @ext = qw(x-gtar x-gzip x-tar zip image zip z gz tz taz tgz lzh arj arc tar cab wmz yfs wsz exe uu xxe bhx b64 hqx mim);
my $port = 8888;
$SIG{PIPE} = 'IGNORE';

my $server = HTTP::Daemon->new( LocalPort => $port ) or  die "Can't start server ($@)" unless defined $server;

open(F, '<file.txt') || die $!;
my @some = <F>;
close F;
my $now;
my $i =1;

while (my $conn = $server->accept)
  {
   $i++;

   if(!$now)
    {
      $now = shift(@some);
      chomp($now);
      print"SET NEW X-Forwarded-For $now\n";
    }
   
    if($i>14)
     {
       $now = shift(@some);
       chomp($now);
       print"SET NEW X-Forwarded-For $now\n";
       $i=0;
       my @thr;
       
       for (@some)
         {
           my $now = $_;
           chomp @some;
      
           if($thr[$i]) { threads->object($thr[$i]->tid())->join; }
       
           $thr[$i]=threads->create(\$now);
           $i=($i+1) % 1; 
          }
        
        foreach(threads->list) { $_->join; }
      }

   while (my $request = $conn->get_request)
     {
        print "X-Forwarded-For - $now\n";
        my $ua = LWP::UserAgent->new;
        $ua->default_header('X-Forwarded-For' =>[$now]);
        $ua->max_size(7750);
        $conn->autoflush;
        $request -> remove_header('Proxy-Connection');
        $request -> remove_header('Keep-Alive');
        $request -> header(Connection=>'close');
        my $resp = $ua->simple_request($request);
        my $c_cont = $resp->content;
      
        if( $resp->content_encoding || (grep { $_ =~ /$resp->content_type/g } @ext) || length($c_cont) < 3000 )
         {
            $conn->send_response($resp);
         }
        else 
         {
            $c_cont_zip = Compress::Zlib::memGzip($c_cont);
            $resp->content($c_cont_zip);
            $resp->content_encoding('gzip');
            $conn->send_response($resp);
         }
     }
    print STDERR "Close: ", $conn->reason, "\n";
    $conn->close;
    undef $conn;
 }
спустя 23 секунды [обр] mkth+[досье]
Как форматировать то? Так?
спустя 14 часов [обр] Алексей Севрюков(61/1292)[досье]
спустя 5 часов [обр] Dennis F. Latypoff aka funky_dennis(2/84)[досье]
отступы, отступы...
спустя 4 месяца 21 день [обр] Евгений Седов aka KPbIC(9/187)[досье]
mkth[досье] Разлюбезнейший, вы на что-то не на то потратили 4 месяца.
спустя 9 часов [обр] Алексей Севрюков(61/1292)[досье]
! mkth[досье] Первое предупреждение и плюс: за мат и неадекватное поведение.
Powered by POEM™ Engine Copyright © 2002-2005