8

私は 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()

しかし、まだ待っています。何が欠けているのかわかりません。

4

2 に答える 2

2

Python 3.2以降では、これは期待どおりに機能します。Python 2の場合、このバグはr74545で修正され、Python2.7.3で利用できるようになります。configparserそれまでの間、3.2以降のconfigparserのバックポートであるライブラリを使用できます。見てみな。

于 2012-01-23T16:18:04.340 に答える
0

私も同じ問題を抱えていました。これは、ワーカープロセスがカスタムコンストラクターを持つユーザー例外を発生させたときに発生します。例外(この場合はConfigParser.NoOptionError )が2つの引数で基本例外を初期化することを確認してください。

class NoOptionError(ValueError):

    def __init__(self, message, *args):
        super(NoOptionError, self).__init__(message, args)
于 2011-05-20T09:55:32.603 に答える