我正在編寫一個加載來自不同文件類型的數據的程序。對於每個支持的文件類型,我都有迭代器。所以我可以通過例如一個文件的數據:迭代大文件時中斷下一個函數
it = MyIterator("filename")
for data in it:
DoSomethingWithData(data)
現在我想有可能停止此迭代。這基本上沒有問題,但在某些情況下,調用迭代器函數的功能需要很長時間,因爲文件中沒有可讀數據。在這些情況下,迭代器在沒有找到任何東西的情況下遍歷整個文件,直到達到結尾並引發StopIteration。
所以我想有機會停下來 - 或者更好地打斷下一個功能,不知道該怎麼做。我想我必須使用線程之類的東西,但是我也不能殺死線程。東西likethis將是很好:
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
...
所以有任何一個知道如何處理這樣的事情?並且它不可能改變迭代器本身...
非常有趣的問題。我通常使用異步I/O來解決這個問題。但是在這種情況下,迭代器不能被修改的情況下,這是行不通的。 – Saish