<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">2014/1/18 Chema Cortes <span dir="ltr"><<a href="mailto:py@ch3m4.org" target="_blank">py@ch3m4.org</a>></span><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div style="overflow:hidden">Este relato es habitual en la programación concurrente.<br>
<br>
Queue se utiliza para "sincronismo" entre workers. El sincronismo<br>
requiere establecer bloqueos, que aumentan en número geométricamente<br>
al aumentar el número de workers, haciendo el programa mucho más lento.<br>
<br>
Si no necesitas "sincronismo", o sea, si no necesitas que los datos se<br>
encolen en el mismo orden que se generan (el orden lo podrías<br>
recomponer después usando las marcas temporales), usa mejor<br>
collections.deque cuyas operaciones son "atómicas" (no bloqueantes).<br>
Ojo con lo que puede llegar a crecer si no eres capaz de sacar datos<br>
al mismo ritmo que se meten.</div></blockquote></div><br><br></div><div class="gmail_extra">El orden en el que se ejecuten es completamente irrelevante. deque parece una opción muy buena, pero, desafortunadamente, no parece ser compatible con multiprocessing.<br>
<br></div><div class="gmail_extra">Aquí está el esqueleto de mi programa:<br><br><a href="https://gist.github.com/Dapid/8520567" target="_blank">https://gist.github.com/Dapid/8520567</a><br><br></div><div class="gmail_extra">
Si uso deque, el proceso siempre ve la misma cola vacía. Si lo convierto en un Thread, puede leer los datos del programa principal, pero no los datos generados desde un multiprocessing.pool.<br><br></div><div class="gmail_extra">
¿Hay alguna otra alternativa?<br></div><div class="gmail_extra"><br><br>
</div></div>