メイン プログラムが停止したときに Python スレッドを停止したいと考えています。サーバーに接続するクラス用です。接続はバックグラウンド スレッドによって維持され、フォアグラウンド スレッドはコールバックに応答します。以下は最小限の例です。
#!/usr/bin/python
import time, threading
class test():
running = False
def __init__(self):
print "init"
self.running = True
self.thread = threading.Thread(target = self.startThread)
self.thread.start()
def __del__(self):
running = False
print "del"
def startThread(self):
print "thread start"
while self.running:
time.sleep(1)
print "thread running"
a = test()
プログラムが終了すると、バックグラウンド スレッドが停止するように通知されるように __del__() が呼び出されることを素朴に期待しますが、バックグラウンド スレッドが停止するまで i は呼び出されません。一部の関数を明示的に呼び出すことはオプションではありません。クラスは他の人によって使用されているため、余分なコード行を強制的に使用したくないからです。