迭代大文件时中断next-function

时间:2013-06-12 14:07:24

标签: python python-2.7

我正在编写一个从不同文件类型加载数据的程序。对于每个支持的文件类型,我都有迭代器。所以我可以查看文件的数据,例如:

it = MyIterator("filename")
for data in it:
    DoSomethingWithData(data)

现在我想有可能停止这次迭代。这通常没有问题,但在某些情况下调用迭代器next() - 函数需要很长时间,因为文件中没有可读数据。在这些情况下,迭代器遍历整个文件而没有找到任何东西,直到它到达终点并引发StopIteration。

所以我希望有机会停止 - 或者更好地打断 - 下一个功能,而不知道怎么做。我想我必须使用类似线程的东西,但我也不能杀死线程。有点像这样的事情:

def Iterate():
    it = MyIterator("filename")
    for data in it:
        self.t0 = time.time()
        DoSomethingWithData(data)

iterationThread = threading.Thread(target=Iterate)
iterationThread.start()

self.t0 = time.time()
maxWaitingTime = 10.
while iterationThread.IsAlive():
    if self.t0 - time.time() > maxWaitingTime:
        KillThread(iterationThread)

这通常是我想要的,但我当然没有KillThread功能......

所以有人知道如何处理这样的事情吗?并且不可能改变迭代器本身......

1 个答案:

答案 0 :(得分:0)

MyIterator听起来就像你控制它一样。

在这种情况下,您可以重新设计它,以便在没有数据时next()方法提前返回,返回None

你的循环看起来像

for data in it:
    if data is not None:
        DoSomethingWithData(data)