我是Python新手并尝试使用multiprocessing.pool程序来处理文件,只要没有例外,它就可以正常工作。如果任何线程/进程获得异常,则整个程序等待线程
代码片段:
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()
失败讯息:
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'",))
我继续添加了一个异常处理程序来终止进程
try:
ifile=cp.get(table,'inputfilename')
except ConfigParser.NoSectionError,ConfigParser.NoOptionError:
usage("One of Parameter not found for"+ table)
terminate()
但仍在等待,不确定是什么遗漏。
答案 0 :(得分:2)
在Python 3.2+中,这可以按预期工作。对于Python 2,此错误已在r74545中修复,并将在Python 2.7.3中提供。同时,您可以使用configparser
库,它是3.2+中configparser的后端。 Check it out.
答案 1 :(得分:0)
我有同样的问题。当工作进程引发具有自定义构造函数的用户异常时,就会发生这种情况。确保您的异常(在这种情况下为ConfigParser.NoOptionError)使用完全两个参数初始化基本异常:
class NoOptionError(ValueError):
def __init__(self, message, *args):
super(NoOptionError, self).__init__(message, args)