[Python-es] ¿Deadlock en multiprocessing?

Chema Cortes pych3m4 en gmail.com
Lun Mar 3 22:19:35 CET 2014


El día 3 de marzo de 2014, 16:05, Daπid <davidmenhur en gmail.com> escribió:
> 2014-03-03 15:51 GMT+01:00 Chema Cortes <pych3m4 en gmail.com>:
>
>> >     q.join()
>>
>> En el código que pones en pastebin no aparece esta línea, y parece ser
>> precisamente el problema de todo.
>
>
> Oops, borré de más.
>
> q.join() estaría justo antes de saver.join(). En todo caso, si reemplazo
> JoinableQueue por Queue y simplemente espero con saver.join(), el resultado
> es el mismo.
>
> También he probado a ponerle un límite de tiempo:
>
> try: get(timeout=1)
> except Queue.Empty(): time.sleep(1)
>
> pero sigue quedándose atascado en el get.

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.

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



>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>



-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
Buscador Python Hispano: http://ch3m4.org/python-es


Más información sobre la lista de distribución Python-es