[Madrid-pm] Colas en Perl

JJ Merelo jjmerelo en gmail.com
Mar Ene 17 04:39:13 PST 2012


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?

-- 
JJ


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