私は異なるファイルタイプからデータをロードするプログラムを書いています。サポートされているファイルの種類ごとに、反復子があります。したがって、たとえば次のようにファイルのデータを調べることができます。
it = MyIterator("filename")
for data in it:
DoSomethingWithData(data)
今、私はこの繰り返しを止める可能性を持ちたいと思っています. これは通常は問題ありませんが、ファイルに読み取り可能なデータがないため、 iterators 関数の呼び出しに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
...
では、そのようなものを処理する方法を知っている人はいますか? そして、イテレータ自体を変更することはできません...