From emhnemhn at gmail.com Fri Nov 1 14:17:48 2013 From: emhnemhn at gmail.com (Ernesto =?ISO-8859-1?Q?Hern=E1ndez-Novich?=) Date: Fri, 01 Nov 2013 16:47:48 -0430 Subject: [caracas-pm] =?iso-8859-1?q?=5BOT=5D_A_la_venta_bibliograf=EDa_co?= =?iso-8859-1?q?mpleta_de_Perl?= Message-ID: <1383340668.5533.46.camel@trillian.itverx.com.ve> Gustavo Delfino est? vendiendo su colecci?n completa de libros de Perl http://articulo.mercadolibre.com.ve/MLV-415202604-vendo-mi-coleccion-de-libros-de-perl-_JM Interesados contactarlo directamente a o a trav?s de Mercado Libre. -- Ernesto Hern?ndez-Novich - @iamemhn - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't aptitude it, it isn't useful or doesn't exist. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 From amijaresp at gmail.com Fri Nov 1 22:02:47 2013 From: amijaresp at gmail.com (Alberto Mijares) Date: Sat, 2 Nov 2013 00:32:47 -0430 Subject: [caracas-pm] Hilos en Perl Message-ID: Hola lista, Estoy jugando un poco, de manera did?ctica, con el m?dulo "threads" de Perl. Quer?a ver qu? tanto pod?a mejorar un script sencillo que tengo para redimencionar fotos. El script original ten?a algo como my @fotos = readdir($dir); for my $pic (@fotos) { if ($pic =~ m/jpe*g$/i) { say "Trabajando con $pic"; &procesar($pic); } } y lo cambi? por my @fotos = readdir($dir); for my $pic (@fotos) { if ($pic =~ m/jpe*g$/i) { say "Trabajando con $pic"; my $th = threads->create('procesar', $pic); say "this is thread" . $th->tid; $th->detach; } } pero as? no se procesa la imagen. Lo curioso es que si en vez de ->detach, uso ->join, s? se procesa normalmente como en el script original. Lo que pasa es que ->join, como bien saben, espera que el hilo culmine para obtener su retorno, y es exactamente igual que hacerlo de manera secuancial sin hilos, incluso un poco m?s lento. Para el procesamiento de im?genes estoy usando Image::Scale, dentro de la funci?n "procesar". ?Alguna pista de por qu? no se ejecuta la funci?n cuando uso el m?todo ->detach? Gracias de antemano. Saludos Alberto Mijares From carlosyr at gmail.com Mon Nov 25 07:26:37 2013 From: carlosyr at gmail.com (=?ISO-8859-1?Q?Carlos_Ram=EDrez?=) Date: Mon, 25 Nov 2013 10:56:37 -0430 Subject: [caracas-pm] Hilos en Perl In-Reply-To: References: Message-ID: Saludos Alberto, Cuando ejecutas la funci?n "create" en un thread, esta autom?ticamente comienza a ejecutarse, sin esperar por m?s nada. El join, se utiliza para esperar la finalizaci?n de un thread ejecut?ndose (como te has dado cuenta) o para obtener el resultado de un thread que finaliz? Si ejecutas un thread y el programa en perl termina sin realizar el join o un detach perl te dar? una alerta (y finalizar? los threads). Ejecuta el siguiente programa para que veas a que me refiero. Nota: voy a copiar una sola vez la funci?n "cuenta" porque es la misma para todos los ejemplos y creo que la mejor pista para lo que quieres est? en el ?ltimo :-D #!/usr/bin/perl use strict; use threads; my $thread = threads->create('cuenta',0,3,1); while ($thread->is_running()){ sleep 1; } sub cuenta { my ($inicio,$final,$paso) = @_; if($inicio > $final || $paso < 0){ warn "# cuenta : no puedo contar asi ($inicio,$final,$paso)...\n"; } for(my $i=$inicio;$i<=$final;$i+=$paso) { print "$i\n"; sleep(1); } } --- Ahora bien,ejecuta el mismo programa pero con una simple modificaci?n: --- #!/usr/bin/perl use strict; use threads; my $thread = threads->create('cuenta',0,3,1); while ($thread->is_running()){ sleep 1; } $thread->join(); #Obtengo el resultado si lo hay. #sub cuenta..... ---- Ahora, el mismo programa pero con un detach ---- #!/usr/bin/perl use strict; use threads; my $thread = threads->create('cuenta',0,3,1); $thread->detach(); #El thread no tratar? devolver? su estado de ejecuci?n, al terminar finalizar? while ($thread->is_running()){ sleep 1; } #sub cuenta..... --- Ahora ejecutando dos "hilos". --- #!/usr/bin/perl use strict; use threads; my $thread1 = threads->create('cuenta',0,3,1); #Cuento desde el 0 hasta el 3 my $thread2 = threads->create('cuenta',10,13,1); #Cuento desde el 10 hasta el 13 $thread1->detach(); #Este thread termina y no me interesa obtener su c?digo salida o resultado $thread2->detach(); #Mismo que lo anterior. while ($thread1->is_running() || $thread2->is_running()){ sleep 1; } #sub cuenta..... -- Otro ejemplo -- #!/usr/bin/perl use strict; use threads; for(my $i=0;$i<9;$i++){ threads->create('cuenta',$i*10,($i*10)+$i+1,1); } #Se crean 10 threads, la primera contar? hasta 1, la segunda hasta 2 y as? sucesivamente. while(my $threads=threads->list(threads::running)){ print "Threads ejecutandose: $threads \n"; sleep 1; } map { $_->join() } threads->list(threads::joinable); #Todas las threads finalizaron pero a?n no han "devuelto" estado. #sub cuenta..... -- Tu script -- my @fotos = readdir($dir); for my $pic (@fotos) { if ($pic =~ m/jpe*g$/i) { say "Trabajando con $pic"; until (threads->list(threads::running) < 5){ sleep 1; } # m?ximo cinco hilos. threads->create('procesar', $pic); map {$_->join()} threads->list(threads::joinable); #Termino los threads que ya finalizaron hasta ahora, } } while(threads->list(threads::running)){ sleep 1; } #Hay que esperar que los ?ltimos 5 threads finalicen. map {$_->join()} threads->list(threads::joinable); #Finalizo los threads terminados. Creo que as? van los tiros, No he trabajado mucho con threads, comenta si te sirve. Saludos. El 2 de noviembre de 2013 00:32, Alberto Mijares escribi?: > > Hola lista, > > Estoy jugando un poco, de manera did?ctica, con el m?dulo "threads" de > Perl. Quer?a ver qu? tanto pod?a mejorar un script sencillo que tengo > para redimencionar fotos. > > El script original ten?a algo como .... From emhnemhn at gmail.com Tue Nov 26 11:57:00 2013 From: emhnemhn at gmail.com (Ernesto =?ISO-8859-1?Q?Hern=E1ndez-Novich?=) Date: Tue, 26 Nov 2013 15:27:00 -0430 Subject: [caracas-pm] Hilos en Perl In-Reply-To: References: Message-ID: <1385495820.6063.14.camel@trillian.itverx.com.ve> On Sat, 2013-11-02 at 00:32 -0430, Alberto Mijares wrote: [...] > Estoy jugando un poco, de manera did?ctica, con el m?dulo "threads" de > Perl. Quer?a ver qu? tanto pod?a mejorar un script sencillo que tengo > para redimencionar fotos. Como el trabajo para cambiar las dimensiones de cada foto es independiente entre fotos y por tanto no necesitan estado mutable compartido, pienso que en lugar de complicarte con hilos, Parallel::ForkManager es m?s f?cil de comprender y usar. -- Ernesto Hern?ndez-Novich - @iamemhn - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't aptitude it, it isn't useful or doesn't exist. GPG Key Fingerprint = 0064 ADF5 EB5C DE16 99C1 6C56 F2A3 86B5 A757 E5A1 From amijaresp at gmail.com Tue Nov 26 12:37:07 2013 From: amijaresp at gmail.com (Alberto Mijares) Date: Tue, 26 Nov 2013 16:07:07 -0430 Subject: [caracas-pm] Hilos en Perl In-Reply-To: <1385495820.6063.14.camel@trillian.itverx.com.ve> References: <1385495820.6063.14.camel@trillian.itverx.com.ve> Message-ID: Le hab?a respondido a Ernesto en privado por equivocaci?n. 2013/11/26 Ernesto Hern?ndez-Novich : > On Sat, 2013-11-02 at 00:32 -0430, Alberto Mijares wrote: > [...] >> Estoy jugando un poco, de manera did?ctica, con el m?dulo "threads" de >> Perl. Quer?a ver qu? tanto pod?a mejorar un script sencillo que tengo >> para redimencionar fotos. > > Como el trabajo para cambiar las dimensiones de cada foto es > independiente entre fotos y por tanto no necesitan estado mutable > compartido, pienso que en lugar de complicarte con hilos, > Parallel::ForkManager es m?s f?cil de comprender y usar. ... Gracias por la sugerencia. La voy a tomar en cuenta y probablemente mi script termine usando Parallel::ForkManager pero de todas formas voy a estudiar las indicaciones de Carlos para ver si funciona de esa forma. Es una buena pr?ctica para entender mejor el asunto y aprender. Luego me pondr? a estudiar en qu? casos es realmente eficiente usar hilos. Cuando haga el ejercicio les comento. Saludos Alberto Mijares