7

python / cythonを使用してCSVファイルを並べ替え、クライアントの統計を生成するユーティリティを開発しましたが、pool.mapを呼び出すと、マップされた関数が実行される前に例外が発生するようです。少数のファイルの並べ替えは期待どおりに機能しているようですが、ファイルの数が10になると、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
4

2 に答える 2

3

コマンド出力のさらに上を確認してください。少なくとも 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

Python マルチプロセッシングでのデバッグ エラーも参照してください。

于 2016-08-09T17:17:09.923 に答える