我正在编写一个从不同文件类型加载数据的程序。对于每个支持的文件类型,我都有迭代器。所以我可以查看文件的数据,例如:
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
功能......
所以有人知道如何处理这样的事情吗?并且不可能改变迭代器本身......
答案 0 :(得分:0)
MyIterator
听起来就像你控制它一样。
在这种情况下,您可以重新设计它,以便在没有数据时next()
方法提前返回,返回None
。
你的循环看起来像
for data in it:
if data is not None:
DoSomethingWithData(data)