3

作業中のスレッドにエレガントに終了するように指示できるように、新しいメソッドをThreadサブクラスに追加したいと思います。このような:

class MyThread(threading.Thread):
    def __init__(self):
        ...
        self.__stop_signal = False
        self.__signal_lock = threading.Lock()
        ...

    def run(self):
        ...
        self.__signal_lock.acquire(True)
        stop_signal = self.__stop_signal
        self.__signal_lock.release()
        if stop_signal:
            return
        ...

    def stop_elegantly(self):
        self.__signal_lock.acquire(True)
        self.__stop_signal = True
        self.__signal_lock.release()

次に、これを行うのは安全ですか?:

thread = MyThread()
thread.start()
...
thread.stop_elegantly()

ありがとう。

4

2 に答える 2

1

はい、問題ありません。実際、次の方法でさらに「エレガントに」実行できます。

def stop_elegantly(self):
    with self.__signal_lock:
        self.__stop_signal = True

実際には、サブクラスのインスタンスごとに個別のロックが割り当てられるため、メンバー変数にアクセスするためにロックは必要ないと思います。たとえば、サブクラスにメソッドを追加するこの回答を参照してください。stop()threading.Thread

于 2012-11-09T03:23:09.850 に答える
0
    self.__signal_lock.acquire(True)
    stop_signal = self.__stop_signal
    self.__signal_lock.release()

上記のコードはループしていますか?はいの場合、それはうまくいくと思います。

于 2012-11-09T01:42:36.633 に答える