Python 迭代大文件时中断下一个函数

Python 迭代大文件时中断下一个函数,python,python-2.7,Python,Python 2.7,我正在写一个程序,从不同的文件类型加载数据。对于每个支持的文件类型,我都有迭代器。因此,我可以使用以下工具查看文件的数据,例如: it = MyIterator("filename") for data in it: DoSomethingWithData(data) 现在我想有可能停止这个迭代。这通常没有问题,但在某些情况下,调用迭代器next()-函数需要很长时间,因为文件中没有可读的数据。在这些情况下,迭代器遍历整个文件而没有找到任何内容,直到它到达末尾并引发StopIterat

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

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
当然


有人知道如何处理这样的事情吗?而且不可能更改迭代器本身…

MyIterator
听起来就像您控制了它一样

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

你的循环看起来像

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

是的,
MyIterator
是我可以控制的东西。但它不仅仅是一个迭代器,它是从众多迭代器中动态选择的迭代器。正如我已经说过的,更改迭代器本身是没有选择的。每个数据类型至少有一个迭代器,每个迭代器的工作方式不同,通常不是我自己写的。非常有趣的问题。我通常使用异步I/O来解决这个问题。但是,在迭代器无法修改的情况下,这是行不通的。