[Madrid-pm] Colas en Perl
Diego Kuperman
diego en kuperman.com.ar
Mar Ene 17 05:26:50 PST 2012
Hola JJ!,
On 1/17/12 1:39 PM, JJ Merelo wrote:
> Hola,
> Estoy intentando ver cómo gestionar colas en Perl. El problema viene,
> como siempre, de implementar un algoritmo evolutivo. Lo he hecho en
> CouchDB con la población almacenada ahí y diferentes clientes pidiendo
> cromosomas para evaluar o reproducirlos. Los detalles no vienen al
> caso, pero el problema es que CouchDB devuelve conjuntos aleatorios
> que se pueden solapar, lo que hace que se pierda en eficiencia.
> Posiblemente haya una mejor forma de hacerlo, pero lo que se me ha
> ocurrido es usar un feed que da CouchDB con los cambios, y al que se
> puede acceder mediante una librería que usa AnyEvent; a partir de ese
> feed, crear "paquetes" de cromosomas a evaluar únicos, que se vayan
> sirviendo a los clientes. He estado mirando cómo hacerlo desde CouchDB
> y en principio no se puede. Así que la idea era que en vez de que los
> clientes pidieran cromosomas directamente a CouchDB, el lector del
> feed de cambios creara paquetes y los mandara a una cola de mensajes;
> los clientes leerían de esa cola de mensajes paquetes que, en
> principio, no se solaparían. Todo de forma asíncrona, sin cerrar a
> nadie ni nada.
> Cómo se implemente me preocupa poco, se puede usar POE, o AnyEvent o
> incluso node.js; pero el problema es que he intentado ver los sistemas
> de colas que hay y no sé muy bien con cuál quedarme, o cuál funcionará
> mejor con Perl.
> He probado Spread y el módulo del mismo nombre y simplemente no
> funciona, devuelve null cuando uno se conecta. TheSchwartz es más bien
> un modelo de trabajadores, y no es lo que busco. Quizás ActiveMQ con
> Net::Stomp, pero no quiero meterme en un jardín que complique más las
> cosas de lo que debería ser algo sumamente simple: un buzón donde deje
> paquetes y se puedan sacar de forma asíncrona, sin preocuparme
> demasiado la prioridad.
>
> ¿Alguna ayuda?
>
Yo he usado para otros temas gearman, sobre todo para cuando necesito en
"tiempo real" los resultados pero tambien teniendo la posibilidad de que
sean completamente asíncronos. Es estable y hay module EV. Creo que esto
te puede resolver.
Sino, hace un par de semanas he implementado un sistema de colas sobre
redis (copiando uno que hay en ruby para poder usar su interfaz web) que
puedes encontrar en https://metacpan.org/module/Resque :)
Otra opción liviana y con modulo EV sería usar el sistema de pubsub de
redis a pelo: http://redis.io/topics/pubsub
(Aunque yo creo que gearman es mas apropiado para lo que yo entiendo que
necesitas).
-dk
Más información sobre la lista de distribución Madrid-pm