0

私は異なるファイルタイプからデータをロードするプログラムを書いています。サポートされているファイルの種類ごとに、反復子があります。したがって、たとえば次のようにファイルのデータを調べることができます。

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...

では、そのようなものを処理する方法を知っている人はいますか? そして、イテレータ自体を変更することはできません...

4

1 に答える 1