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来解决这个问题。但是,在迭代器无法修改的情况下,这是行不通的。