Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : yurik shestakov                      2:5020/400     14 Aug 2004  10:49:49
 To : abrasha shapirus
 Subject : Re: ограничить количество работающих копий скрипта
 -------------------------------------------------------------------------------- 
 
 On Fri, Aug 13, 2004 at 07:41:02PM +0400, abrasha shapirus wrote:
 
 as> нужно сие для ограничения количества одновременно работающих 
 as> CGI-скриптов на не слишком мощной машине.
 
 as> как такое реализовать попроще и покрасивее?
 
 можно где-то так, как приведено ниже. В качестве аргумента
 передается файл со списоком URL-ей, к-е нужно вытянуть.
 И задается максимально количество паралельно работающих экземпляров wget.
 ========================================================================
 #!/usr/bin/perl -w
 use strict;
 use POSIX ":sys_wait_h";
 use FileHandle;
 use Getopt::Std;
 
 my %opt = ();
 getopts('F:c:',\%opt);
 my $max_forks = $opt{'F'} || 100;
 my $max_childs = $opt{'c'} || 5;
 my $file_list = shift @ARGV;
 die "Usage: $0 url_list_filename\n" unless $file_list && -f $file_list;
 open (IN, '<'.$file_list) or die "open $file_list: $!";
 my @url_list = ();
 while (<IN>) {
   chomp;
   push @url_list, $_;
   }
 close IN;
 
 autoflush STDOUT 1;
 my $childs_in_process = 0;
 my %wait_it = ();
 my $fork_cnt = 0;
 LOOP:
 while (scalar @url_list && $fork_cnt < $max_forks) {
    if ( $childs_in_process <= $max_childs) { # fork new child;
      my $url = shift @url_list;
      my $pid = fork();
      if ($pid) {
         $wait_it{$pid} = $url;
         ++$childs_in_process;
         ++$fork_cnt;
         print "($childs_in_process/$fork_cnt) Retrive $url\n";
         next LOOP;
         }
      die "fork: $!" unless defined $pid;
      exec 'wget','-q','-c', $url;
      # exit here
      }
   else { # check for childs is running
     foreach my $pid (keys %wait_it) {
       print "Wait pid=$pid (WNOHANG)...";
       my $rc = POSIX::waitpid($pid, &WNOHANG);
       print " rc=$rc" , $rc == 0 ? "\r" : " fork_cnt=$fork_cnt\n";
       if ($rc > 0) { # process exited
         delete $wait_it{$pid};
         --$childs_in_process;
         }
       elsif ($rc == -1) {
         print STDERR "waitpid($pid) error: $!\n";
         }
       }
     }
   sleep 2;
   }
 print "Loop done. childs_in_process=$childs_in_process\n";
 # ждать завершения всех остальных
 foreach my $pid (keys %wait_it) {
   print "Wait pid=$pid: $wait_it{$pid}\n";
   my $rc = POSIX::waitpid($pid, 0);
   if ($rc > 0) { # process exited
     delete $wait_it{$pid};
     --$childs_in_process;
     }
   elsif ($rc == -1) {
     print STDERR "waitpid($pid) error: $!\n";
     }
   }
 exit 0;
 ========================================================================
 
 -- 
 // yurik shestakov
 --- ifmail v.2.15dev5.3
  * Origin: Unknown (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 ограничить количество работающих копий скрипта   abrasha shapirus   13 Aug 2004 20:41:02 
 ограничить количество работающих копий скрипта   Justin Finch-Fletchley   14 Aug 2004 00:26:12 
 Re: ограничить количество работающих копий скрипта   yurik shestakov   14 Aug 2004 10:49:49 
 Re: ограничить количество работающих копий скрипта   Alexey Mahotkin   15 Aug 2004 00:18:50 
 ограничить количество работающих копий скрипта   abrasha shapirus   15 Aug 2004 20:37:14 
 Re: ограничить количество работающих копий скрипта   Alex Povolotsky   25 Aug 2004 12:13:12 
 ограничить количество работающих копий скрипта   abrasha shapirus   25 Aug 2004 21:37:56 
 Re: ограничить количество работающих копий скрипта   Alex Povolotsky   26 Aug 2004 11:05:16 
 ограничить количество работающих копий скрипта   abrasha shapirus   26 Aug 2004 21:31:46 
 ограничить количество работающих копий скрипта   Serge Chervjakov   27 Aug 2004 02:01:47 
 Re: ограничить количество работающих копий скрипта   Artem Chuprina   27 Aug 2004 11:38:55 
 Re: огpаничить количество pаботающих копий скpипта   Nick Knutov   27 Aug 2004 10:04:00 
Архивное /ru.perl/10069b11a4845.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional