-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 El 17/01/14 13:40, Daπid escribió: > Hola: > > Tengo una aplicación que genera datos en un pool de ocho > trabajadores (joblib.Parallel) que son almacenados en una base de > datos (Pytables) por un proceso paralelo (multiprocessing.Process). > Los datos son transferidos a través de una cola. > > Ahora bien: el bucle que genera los datos es muy rápido, hay datos > nuevos cada milésima de segundo. Mi pregunta es, cuando intento > escribir en la cola, ¿se produce un bloqueo? ¿El resto de > trabajadores tiene que esperar para escribir sus resultados? Al > haber tantos procesos leyendo y escribiendo en la cola con tanta > frecuencia, puede ser un factor importante.
Este relato es habitual en la programación concurrente. Queue se utiliza para "sincronismo" entre workers. El sincronismo requiere establecer bloqueos, que aumentan en número geométricamente al aumentar el número de workers, haciendo el programa mucho más lento. Si no necesitas "sincronismo", o sea, si no necesitas que los datos se encolen en el mismo orden que se generan (el orden lo podrías recomponer después usando las marcas temporales), usa mejor collections.deque cuyas operaciones son "atómicas" (no bloqueantes). Ojo con lo que puede llegar a crecer si no eres capaz de sacar datos al mismo ritmo que se meten. > > El objeto que pongo en la cola es: > > [(etiqueta1, etiqueta2), [tiempo_a, valor1_a, valor2_a, valor3_a, > (i1_a, i2_a)], [tiempo_b, valor1_b, valor2_b, valor3_b, (i1_b, > i2_b)] ...] > > donde el número de listas es variable (~10) y el proceso que > guarda desempaqueta los valores para guardarlos en la tabla > > etiqueta1, etiqueta2, tiempo_a, valor1_a, valor2_a, valor3_a, i1_a, > i2_a etiqueta1, etiqueta2, tiempo_b, valor1_b, valor2_b, valor3_b, > i1_b, i2_b ... > > ¿Hay alguna forma más eficiente de hacer esta transferencia? Las > etiquetas serán guardadas como enteros sin sign de 32 bits, valores > y tiempo floats de 32 bits e i1 e i2, float64. > > > /David. > > > _______________________________________________ Python-es mailing > list [email protected] > https://mail.python.org/mailman/listinfo/python-es FAQ: > http://python-es-faq.wikidot.com/ > - -- Hyperreals *R: http://ch3m4.org/blog Quarks, bits y otras criaturas infinitesimales -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBAgAGBQJS2sKZAAoJEFdWyBWwhL4FxIwH/iqhtitcaS4mXG48Sf2CG7Yk 0vVGY3GnID+q0pkUEQR0wVvwsbD/pKErwzosp7jbsubbAjHDMsnjXUKun29+4hud oi9p5BPSaf/6eSQiTBkDoPF2RGOf7kBr+p99zKShtx4sUwbUR03xD3MG2HjGpiEj u6WzsKwlqP892O71u4NXUckqR2V8F16LFkHAmfhjOIhr9tJy2ESkCjwf6QdZo48C NgHYt5ZQfbLQLLCJJyZv7pZJpCP0fcNSe7b2oRVexs5yT1NELWk1vmmM7TdTaPT9 5/6Hdkz/6guY5ougIxbl0BzD+wlsH7FyXsjCJPKXb882mR9Hm3qV1EBYEE/nRG4= =GSFa -----END PGP SIGNATURE----- _______________________________________________ Python-es mailing list [email protected] https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
