Python多处理溢出错误

时间:2013-05-31 04:23:52

标签: 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.map(get_object, rows)
print results

这会返回溢出错误。本网站上有大量关于溢出错误的帖子,但通常是由于范围问题或人们试图创建巨大的列表。行数在1024到100,000之间......根本不算太大。

我可以打印结果,看到错误发生在迭代结束时。我相信这与map如何加入对象列表有关。它应该维持秩序,所以我不应该在那里遇到任何问题。

错误:OverflowError: Python int too large to convert to C long

更新:查看源代码,在pool.py的第528行(Enthought Python 2.7)中引发了错误。这是get类的ApplyResult方法。

以下是我认为代码正在执行的功能和演练:

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._ready检查正在通过,因为我没有看到TimeoutError。 self._ccess检查调用函数成功:

def successful(self):
    assert self._ready
    return self._success

因此,get函数会重新检查作业是否已完成。据推测,他们刚刚在之前调用的if语句中通过了该检查。返回值应该是一个对象(不是int),然后溢出。

想法?

0 个答案:

没有答案