[Python-es] ¿Deadlock en multiprocessing?

Daπid davidmenhur en gmail.com
Lun Mar 3 11:23:07 CET 2014


Hola:

Tengo un programa que genera ciertos datos en paralelo y los pone en una
cola para ser guardados en un archivo HDF5. Parece funcionar bien, pero de
vez en cuando, el proceso se atasca. Aquí el código:

http://pastebin.com/MuTKBzk8

Y aquí lo que escupe el programa:

[Parallel(n_jobs=-1)]: Done 1771 out of 1771 | elapsed:  1.4min finished
Remaining 1497 . Waiting for saving.

# Después de varios días, cancelo:

^CTraceback (most recent call last):
  File "generate_transforms.py", line 234, in <module>
Process Process-1:
Traceback (most recent call last):
  File "/usr/lib64/python2.7/multiprocessing/process.py", line 258, in
_bootstrap
    self.run()
  File "/usr/lib64/python2.7/multiprocessing/process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "generate_transforms.py", line 141, in save_wavelet
    q.join()
  File "/usr/lib64/python2.7/multiprocessing/queues.py", line 340, in join
    val = q.get()
  File "/usr/lib64/python2.7/multiprocessing/queues.py", line 117, in get
    self._cond.wait()
  File "/usr/lib64/python2.7/multiprocessing/synchronize.py", line 246, in
wait
    res = self._recv()
KeyboardInterrupt
    self._wait_semaphore.acquire(True, timeout)
KeyboardInterrupt
Closing remaining open
files:./82593_lv_mcx_DIA_5mz_525to650/raw/82593_lv_mcx_DIA_5mz_525to650.h5...done



El proceso de guardado es tan rápido que, cuando no se ha atasca, para el
momento en el que pregunto el tamaño de la cola, ya está vacía; pero cuando
sí se atasca, parece quedarse bloqueada. ¿Alguna idea de por qué ocurre? Lo
más extraño es que no es determinista, sólo pasa a veces. Estoy en Linux
usando Python 2.7.


/David.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140303/773fc5bd/attachment.html>


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