我已经使用python/cython开发了一个实用程序,它可以对CSV文件进行排序并为客户端生成统计信息,但是调用pool.map似乎会在我的映射函数有机会执行之前引发异常。对少量文件进行排序似乎可以正常工作,但是随着文件数量增加到10个,我在调用pool.map之后会得到下面的索引器错误。有人碰巧认识到下面的错误吗?任何帮助都非常感谢。
虽然代码在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
索引器错误是在sort_file()中的某个位置(即子进程中)出现的错误。它由父进程重新引发。显然
multiprocessing
并没有试图告诉我们错误的真正来源(例如发生在哪一行上),甚至没有试图告诉我们是什么参数导致了这个错误。我更讨厌multiprocessing
了:-(在命令输出中进一步检查。 至少在Python 3.4中,
multiprocessing.pool
将有助于在父进程回溯上方打印一个RemoteTraceback
。你会看到这样的东西:在上述情况下,引发错误的代码位于
/path/to/your/code/here.py", line 80
另见debugging errors in python multiprocessing
相关问题 更多 >
编程相关推荐