0

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

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当然没有功能......

那么有谁知道如何处理这样的事情?并且不可能改变迭代器本身......

4

1 回答 1

0

MyIterator听起来你可以控制它。

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

然后你的循环看起来像

for data in it:
    if data is not None:
        DoSomethingWithData(data)
于 2013-06-12T15:48:04.927 回答