2016-12-02 7 views
0

私はこの問題を複数のフォーラムで解決しようとしましたが、解決策はまだありません。 私が探しているものはできるだけ具体的にしようとします。 私は、スレッドを特定のタイムアウト後に終了させる必要があるユースケースを持っています。私はスレッドを終了しないことを理解しているので、メインスレッドから.join(timeout = x)を使用したくありません。このタイムドイベントをスレッド内で実現したいと思っており、終了する前にいくつかのクリーンアップとアップデートを行うべきです。 JFYI:runメソッドを使用して状態をチェックするループを使用することはできません。私の必要性は、ターゲット関数がrunメソッド内で呼び出されることです。タイマーに基づいて内部からPythonスレッドを終了します

+0

スレッドは共同でのみ終了できます。あなたが呼んでいる機能にそれを停止する仕組みがないなら、あなたは問題があります。 – tdelaney

答えて

0

eventlet.timeoutを使用する別の方法です。以下のtarget_functionThread.runブロックの主なロジックです。時間が経過すると、あらかじめ定義された例外がスローされます。 cleanup機能で内部クリーンアップロジックブロックを追加することができます。

from eventlet.timeout import Timeout 
from eventlet import sleep 


class TimeoutError(Exception): 
    pass 


def target_function(seconds=10): 
    print("Run target functions ...") 
    for i in range(seconds, -1, -1): 
     print("Count down: " + str(i)) 
     sleep(1) 


def cleanup(): 
    print("Do cleanup ...") 

timeout = Timeout(seconds=5, exception=TimeoutError) 
try: 
    target_function(20) 
except TimeoutError: 
    cleanup() 
finally: 
    print("Timeout ...") 
    timeout.cancel() 

あなたの要件を満たしていることを願います。

+0

ありがとうTheresa。私はこれを試してみましょう。これは私のために働くかもしれません。だから、私はこの場合、スレッドはそれ自身の中で終了すると思いますか? –

+0

これは、タイマーに達した後でのみ、ターゲット関数の実行を開始しますか?タイマーに達すると、スレッドがターゲット関数の実行を開始して終了することを望みました。私はこれを実現する方法がありますか? –

+0

@VargheseMuthalaly上記の私の更新をしてください。 – ichbinblau

関連する問題