Soy nuevo en Python y estoy probando un programa de multiprocesamiento.pool para procesar archivos, funciona bien siempre y cuando no haya excepciones. Si alguna de la rosca/proceso obtiene una excepción todo el programa espera a que el hilomultiprocesamiento El grupo se bloquea cuando hay una excepción en cualquiera de los hilos
fragmento de código: Mensaje
cp = ConfigParser.ConfigParser()
cp.read(gdbini)
for table in cp.sections():
jobs.append(table)
#print jobs
poolreturn = pool.map(worker, jobs)
pool.close()
pool.join()
Fallo:
Traceback (most recent call last):
File "/opt/cnet-python/default-2.6/lib/python2.6/threading.py", line 525, in __bootstrap_inner
self.run()
File "/opt/cnet-python/default-2.6/lib/python2.6/threading.py", line 477, in run
self.__target(*self.__args, **self.__kwargs)
File "/opt/cnet-python/default-2.6/lib/python2.6/multiprocessing/pool.py", line 259, in _handle_results
task = get()
TypeError: ('__init__() takes exactly 3 arguments (2 given)', <class 'ConfigParser.NoOptionError'>, ("No option 'inputfilename' in section: 'section-1'",))
I se adelantó a agregar un controlador de excepción para finalizar el proceso
try:
ifile=cp.get(table,'inputfilename')
except ConfigParser.NoSectionError,ConfigParser.NoOptionError:
usage("One of Parameter not found for"+ table)
terminate()
pero todavía espera, no estoy seguro de qué es lo que falta.
Parece que ConfigParser tiene el mismo problema que SQLAlchemy (excepciones no seleccionables), vea [Script de bloqueo en Python usando SQLAlchemy y multiprocesamiento] (http://stackoverflow.com/questions/8785899/hang-in-python-script -using-sqlalchemy-y-multiprocesamiento). He informado sobre este problema ya que [las excepciones de ConfigParser no son seleccionables] (http://bugs.python.org/issue13760). –