[Madrid-pm] Opción que imponga menos carga al servidor

Salvador Fandiño sfandino en yahoo.com
Mar Oct 16 03:47:51 PDT 2007


Hola,

tampoco es tan complicado hacer un programa que recorra el sistema de ficheros leyendo solo lo que haga falta y sin usar File::Find:


use strict;
use warnings;



sub fsbrowser {
    # no detecta ciclos en el sistema de ficheros!!!

    my @pending_dirs = grep { -d $_ } @_;
    my $current_dir_handle;
    my $current_dir_name;

    sub {
        while (1) {
            unless ($current_dir_handle) {
                while (@pending_dirs) {
                    $current_dir_name = shift @pending_dirs;
                    opendir $current_dir_handle, $current_dir_name
                        and last;
                }
                return undef
                    unless $current_dir_handle;
            }
            my $fn = readdir $current_dir_handle;
            unless (defined $fn) {
                undef $current_dir_handle;
                next;
            }

            next if $fn =~ /^\./;
            my $fullfn = $current_dir_name . '/' . $fn;
            push @pending_dirs, $fullfn if -d $fullfn;

            return $fullfn;
        }
    }
}


my $browser = fsbrowser('/etc');

my $i = 0;
while (defined(my $fn = $browser->())) {
    $i++;
    print "$i: $fn\n";
}


----- Original Message ----
From: DervishD <bugs en dervishd.net>
To: Madrid PM <madrid-pm en pm.org>
Sent: Tuesday, October 16, 2007 12:07:21 PM
Subject: [Madrid-pm] Opción que imponga menos carga al servidor


    Hola :)))

Vuelvo a la carga con mis preguntas raritas ;)))

Veréis, estoy haciendo una especie de sucedáneo de blog para mi
 página
web (no quiero un blog exactamente, por eso me lo estoy haciendo yo) y
resulta que necesito recorrer un árbol de directórios leyendo ciertos
ficheros.

Ahora mismo tengo dos opciones: la primera es usar File::Find, pero en
el caso común voy a parar de recorrer en cuanto haya leído un número
pequeño de ficheros, y File::Find seguirá procesando el árbol
 incluso
cuando ya no me interesen más ficheros. Siempre puedo abortar el
 script
en la función "wanted", pero no me parecen formas. Así y todo, es una
opción.

La otra opción es tener una lista de todos los ficheros en un fichero
 de
texto. Esto digamos que es "grátis" en términos de carga del
 servidor,
ya que la lista es generada fuera del servidor y luego subida. Habría
que ir leyendo el fichero línea por línea, actuar sobre los ficheros
 que
me interesen y romper el bucle.

En el peor de los casos, tendré que leer TODOS los ficheros del
 árbol, y
me imagino que ahí la carga será similar usando File::Find que la
 lista
de ficheros.

En el caso común de tener que leer sólo unos pocos ficheros, y
 asumiendo
que el caché de disco no ayudará (es decir, en principio las entradas
 de
directório no estarán cacheadas, habrá que ir al disco a por ellas.
 El
servidor es compartido así que no puedo asumir que el caché estará
 ahí
para ayudar, puede estar lleno con otras cosas), ¿qué opción es
 mejor,
leer una lista y luego ir procesando los ficheros, usar File::Find o
usar otra forma de recorrer el árbol? Mi objetivo es imponer al
 servidor
la menor carga posible tanto en uso de CPU como en trasiego de disco
duro. En realidad no tengo ningún límite impuesto en ninguna de las
 dos
cosas, pero no es plan de abusar de los recursos.

Usar File::Find me parece pasarse porque al fin y al cabo ya sé qué
ficheros hay en el árbol (están en la lista pregenerada), pero no sé
 de
más opciones.

Muchas gracias por adelantado :)))

    Raúl Núñez de Arenas Coronado

-- 
Linux Registered User 88736 | http://www.dervishd.net
It's my PC and I'll cry if I want to... RAmen!
We are waiting for 13 Feb 2009 23:31:30 +0000 ...
_______________________________________________
Madrid-pm mailing list
Madrid-pm en pm.org
http://mail.pm.org/mailman/listinfo/madrid-pm





       
____________________________________________________________________________________
Pinpoint customers who are looking for what you sell. 
http://searchmarketing.yahoo.com/


Más información sobre la lista de distribución Madrid-pm