2014-03-03 22:19 GMT+01:00 Chema Cortes <[email protected]>:

>
> OK. Creo que has hecho un planteamiento demasiado optimista. El
> proceso "saver" entra a funcionar antes de los jobs generadores, por
> lo que es posible que termine sin haber procesado todos los datos,
> bloqueándose el hilo principal por quedar datos en la cola.
>

El proceso real crea el fichero en el que va a guardar los datos, y no
termina hasta que recibe un None, en cuyo caso sólo tiene que cerrar el
archivo y terminar casi inmediatamente.

Por otro lado, estás usando una librería externa para HDF5 que podría
> estar descontrolando el GIL del intérprete. Prueba a usar el backend
> "threading" a ver si mejora.
>
> https://pythonhosted.org/joblib/parallel.html#using-the-threading-backend
>

En mi caso, eso no es una opción. El cálculo tira mucho de CPU, y necesito
hacer uso de los ocho núcleos que tengo. Cierto es que la parte "dura" del
cálculo está en Cython y podía ejecutarla con nogil. Lo que estoy haciendo
ahora es simplemente poner los resultados en memoria y guardarlos todos
seguidos al final. Por otro lado, convertir el proceso "saver" en un thread
es probablemente una buena idea.

Lo sospechoso es que en la mayoría de los casos, funciona. Si estuviera
haciendo algo mal, debería fallar siempre; no funcionar para ciertos
conjuntos de datos y fallar para otros muy similares. Huele a bug en
Python, pero no estoy seguro.
_______________________________________________
Python-es mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a