我正在编写一个从不同文件类型加载数据的程序。对于每种支持的文件类型,我都有迭代器。所以我可以浏览一个文件的数据,例如:
it = MyIterator("filename")
for data in it:
DoSomethingWithData(data)
现在我想有可能停止这个迭代。这通常没有问题,但在某些情况下,调用 iteratorsnext()
函数需要很长时间,因为文件中没有可读数据。在这些情况下,迭代器遍历整个文件而没有找到任何东西,直到它到达末尾并引发 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
当然没有功能......
那么有谁知道如何处理这样的事情?并且不可能改变迭代器本身......