0
Pythonプロセスのメインスレッドがシャットダウンされたとき(通常は、キャッチされない例外を指定して)、関数を実行する方法はありますか?メインスレッドはどのようにファイナライズするのですか?
私はatexit.register
は、その機能を提供するだろう期待していたが、メインスレッドが終了したとき、明らかにそれが呼び出されない - 場合にのみ、終了したすべてのスレッド。だから、このコードは意図したとおりに動作しません:私はそれが終了する前に、自分自身後にクリーンアップする機会を持ちたいので
import atexit
import threading
done = False
def stop_child_thread():
global done
done = True
def child_thread():
while not done:
pass
atexit.register(stop_child_thread)
t = threading.Thread(target=child_thread)
t.start()
私はデーモンスレッドとして子スレッドを起動する必要はありません。
ここで私が考えることのできる唯一の解決策は、メインスレッドがまだ生きているかどうかを(子スレッドか専用スレッドか)定期的にチェックし、必要でない場合は実行することです。
Thxをし、これは私が私の質問に示した簡単な設定で動作しているようです - それは、ポーリングよりはましです私は使用する予定だった。残念なことに、何らかの形で実際のコードでは、わずかな不具合が発生します。すべてのスレッドが正常に完了したにもかかわらず、Pythonインタプリタが生き残っているようです。 CTRL-Cで簡単に停止できます。私は何が起こっているのか分かりませんし、小さな例でそれを再現することはできません。おそらく、Pythonインタプリタの終了メカニズムが混乱します。 – max