The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"ускорить работу скрипта - fork?"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"ускорить работу скрипта - fork?" 
Сообщение от jr emailИскать по авторуВ закладки(ok) on 06-Окт-05, 08:56  (MSK)
Есть скрипт perl, который поочередно опрашивает сетевые устройства (порядка 1000 штук). Что-то типа:
#!/bin/perl

@hosts = ( "192.168.0.1", "192.168.0.2", и т.д );
foreach $ip ( @hosts ) {
   $res = MyFunc ( $ip );
   print "$ip -> $res\n";
}

Процесс работы с каждым устройством занимает, например, секунд 15. Причем это время затрачивается на отклики от устройств, а не на расчеты скрипта. Отсюда логичное решение делать одновременный опрос сразу нескольких устройств для ускорения общей работы скрипта. Т.е. грубо говоря, можно породить, скажем, процессов 10, каждый процесс для одного $ip, и как только один процесс завершается, запускать новый для следующего не обработанного $ip. И так, пока не обработается весь список @hosts. Подозреваю, что мне может помочь функция fork, но как ее реализовать пока плохо понимаю...
Как это можно сделать?

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "ускорить работу скрипта - fork?" 
Сообщение от jonatan Искать по авторуВ закладки(ok) on 06-Окт-05, 09:23  (MSK)
http://webdesign.tria.lv/tutorials/perl/perlbook/g14.html#g1404
http://aplawrence.com/Unix/perlforkexec.html
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "ускорить работу скрипта - fork?" 
Сообщение от kel Искать по авторуВ закладки on 06-Окт-05, 09:42  (MSK)
fping massive + foreach any.
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "ускорить работу скрипта - fork?" 
Сообщение от jr emailИскать по авторуВ закладки(ok) on 06-Окт-05, 11:30  (MSK)
Вот, наваял примерчик. Покритикуйте, что не грамотно сделано.

#!/usr/bin/perl

use strict;

my $pids = {};      # хэш с запущенными процессами
my $count = 0;      # счетчик с текущим колич. процессов
my $max_count = 4;  # максимально допустимое число одновременных процессов
F: for ( my $i = 0; $i < 20; $i++ ) { # всего будет 20 процессов
   my $pid = fork();
   my $slip_var = rand() * 5 + 5;
   ##### код дочернего процесса
   if ( $pid == 0 ) {
      sleep ( $slip_var );
      print "Daemon $i with $$ pid finished.\n";
      exit 0;
   } ##### дочерний процесс завершен
   ##### код родителя
   else {
      if ( $pid ) {
         $pids->{$pid} = 1; # вносим pid дочернего процесса в список
         $count++;          # и увеличиваем счетчик
         print "Daemon $i with $pid started on $slip_var sec. ($count)\n";
      }
      else {
         print "Error: cannot fork $i with pid $pid.\n";
      }
      # если число дочек еще не равно максимальному, то запускаем еще одну
      if ( $count < $max_count ) { next F; }
      # иначе ждем завершения имеющихся
      else {
         W: while ( 1 ) {
            wait();
            foreach my $pid ( keys %{$pids} ) {
               # проверяем на наличие запущенных дочек...
               if ( getpgrp $pid == -1 ) {
                  # ... и если нет процесса, то удаляем его из списка и уменьшаем счетчик
                  $count--;
                  delete $pids->{$pid};
               }
            }
            # если дочек меньше максимально допустимого, то запускаем следующую дочку
            if ( $count < $max_count ) { last W; }
            sleep ( 1 );
         }
      }
   } ##### конец кода родителя
}

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "ускорить работу скрипта - fork?" 
Сообщение от Skif Искать по авторуВ закладки(ok) on 06-Окт-05, 12:57  (MSK)
Смотри в сторону Threads это быстрее и меньше жрет памяти чем fork
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "ускорить работу скрипта - fork?" 
Сообщение от zedi emailИскать по авторуВ закладки(??) on 06-Окт-05, 13:31  (MSK)
>Смотри в сторону Threads это быстрее и меньше жрет памяти чем fork
>


Тогда для каждой платформы свою реализацию Treads будешь делать. Fork универсальней, хоть и ресурсоемкней ...

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "ускорить работу скрипта - fork?" 
Сообщение от Skif Искать по авторуВ закладки(ok) on 07-Окт-05, 11:48  (MSK)
>
>Тогда для каждой платформы свою реализацию Treads будешь делать. Fork универсальней, хоть
>и ресурсоемкней ...


Ну, за все приходиться платить, а при таком раскладе даже будет лучше для мультипроцессорных систем. Хотя каждый решает сам. главный недостаток threads (хотя смотря с какой стороны смотреть) то что они дут одним процессом и если процесс упал, то упали и все нити.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру