2012-12-21 33 views
5

私は、CSVファイルをソートしてクライアントの統計を生成するpython/cythonを使ってユーティリティを開発しましたが、マップされた関数の実行前に例外を発生させるようです。少数のファイルをソートすることは期待どおりに機能しているようですが、ファイル数が10に増えるにつれて、pool.mapを呼び出した後、私は以下のIndexErrorを取得します。誰かが以下のエラーを認識することはありますか?どんな助けでも大歓迎です。Pythonマルチプロセッシングpool.mapはIndexErrorを発生させます

コードがNDAの下ですが、ユースケースは非常に簡単です:

コードサンプル:

def sort_files(csv_files): 
    pool_size = multiprocessing.cpu_count() 
    pool = multiprocessing.Pool(processes=pool_size) 
    sorted_dicts = pool.map(sort_file, csv_files, 1) 
    return sorted_dicts 

def sort_file(csv_file): 
    print 'sorting %s...' % csv_file 
    # sort code 

出力:

File "generic.pyx", line 17, in generic.sort_files (/users/cyounker/.pyxbld/temp.linux-x86_64-2.7/pyrex/generic.c:1723) 
    sorted_dicts = pool.map(sort_file, csv_files, 1) 
    File "/usr/lib64/python2.7/multiprocessing/pool.py", line 227, in map 
    return self.map_async(func, iterable, chunksize).get() 
    File "/usr/lib64/python2.7/multiprocessing/pool.py", line 528, in get 
    raise self._value 
IndexError: list index out of range 
+0

見ます( 'sorted_dict')のコードサンプル(' results')が表示されます。実際のコードを実行してエラーを生成していないことを示しています。 – BrenBarn

+0

私の一部のタイプミス - 結果変数は、統計を計算する非常に似た関数からのものでした。私はタイプミスを修正しました。 – Cryo

答えて

14

IndexErrorがありますsort_file()、つまりサブプロセスのどこかでエラーが発生します。親プロセスによって再生成されます。明らかに、エラーが本当にどこから来たのか(例えば、どの行にあるか)、あるいはsort_file()がどのような引数を指定したのかを知らせようとする試みはありません。私は、コマンド出力の最大multiprocessingさらに:-(

+0

修正!私のcsvファイルの1つに列がないことが判明しました。見ていただきありがとうございます! – Cryo

0

チェック、さらに嫌いのPython 3.4では 少なくとも、multiprocessing.poolが親切親プロセスのトレースバックの上RemoteTracebackが印刷されますあなたが何かわかります。

multiprocessing.pool.RemoteTraceback: 
""" 
Traceback (most recent call last): 
    File "/usr/lib/python3.4/multiprocessing/pool.py", line 119, in worker 
    result = (True, func(*args, **kwds)) 
    File "/usr/lib/python3.4/multiprocessing/pool.py", line 44, in mapstar 
    return list(map(*args)) 
    File "/path/to/your/code/here.py", line 80, in sort_file 
    something = row[index] 
IndexError: list index out of range 
""" 

The above exception was the direct cause of the following exception: 

Traceback (most recent call last): 
    File "generic.pyx", line 17, in generic.sort_files (/users/cyounker/.pyxbld/temp.linux-x86_64-2.7/pyrex/generic.c:1723) 
    sorted_dicts = pool.map(sort_file, csv_files, 1) 
    File "/usr/lib64/python2.7/multiprocessing/pool.py", line 227, in map 
    return self.map_async(func, iterable, chunksize).get() 
    File "/usr/lib64/python2.7/multiprocessing/pool.py", line 528, in get 
    raise self._value 
IndexError: list index out of range 
を上記の場合

は、エラーを発生させるコードが/path/to/your/code/here.py", line 80

であるあなたが示してトレースバックが異なるヴァリアーが含まれてもdebugging errors in python multiprocessing

関連する問題