Python多处理溢出错误
我正在测试Python多处理模块,以便从同一文件的不同缓冲区偏移量中读取数据。偏移量是先验的,并被索引为“行” 代码如下所示:Python多处理溢出错误,python,python-2.7,multiprocessing,Python,Python 2.7,Multiprocessing,我正在测试Python多处理模块,以便从同一文件的不同缓冲区偏移量中读取数据。偏移量是先验的,并被索引为“行” 代码如下所示: def get_object(row): return file.get(row) #Where get seeks to the offset and returns the data object. rows = range(len(file)) #This gets the row ids. pool = mp.Pool() results = pool
def get_object(row):
return file.get(row) #Where get seeks to the offset and returns the data object.
rows = range(len(file)) #This gets the row ids.
pool = mp.Pool()
results = pool.map(get_object, rows)
print results
这将返回一个溢出错误。这个网站上有很多关于溢出错误的帖子,但通常是由于范围问题或人们试图创建巨大的列表。行数在1024到100000之间…一点也不太大
我可以打印结果,并看到错误发生在iterable的末尾。我相信这与map如何加入对象列表有关。它应该维持秩序,所以我在那里不会有任何问题
错误:溢出错误:Python int太大,无法转换为C long
更新:查看源代码pool.py的第528行(Enthound Python 2.7)出现错误。这是ApplyResult
类的get
方法
以下是我认为代码所采用的函数和演练:
def get(self, timeout=None)
self.wait(timeout)
if not self._ready:
raise TimeoutError
if self._success:
return self._value
else:
raise self._value
这是由上面函数中的map调用的。自我准备检查通过了,因为我没有看到时间错误。self.\u success check调用函数successful:
def successful(self):
assert self._ready
return self._success
因此,get函数随后会重新检查作业是否已完成。大概是因为我们刚刚通过了前面调用的if语句中的检查。返回值应该是对象(而不是int),然后溢出
想法?请注意,
[x代表x范围(len(文件))]
与范围(len(文件))
相同,只是速度较慢。get\u object
的定义不起作用。@larsmans“get\u object的定义也不起作用。”-你能在此基础上展开吗?为什么不呢?它忽略它的参数并使用一些索引i
。这一定是个错误。@larsmans更新了语法更正。什么操作系统?您是否碰巧是无限多处理循环的受害者(即,如果Windows下的缺少)?