以下のスクリプトを使用すると、スレッドを終了できないようです。スクリプトは問題なく円滑に実行されますが、終了しても終了しません。私はまだスレッドが生きているのを見ることができます、私はhtop
を使ってそれらを殺すか、コマンドラインを完全に終了させなければなりません。スレッドが終了せず、プログラムが終了しない
このスクリプトを終了してスレッドを終了させる方法を教えてください。
def async_dns():
s = adns.init()
while True:
dname = q.get()
response = s.synchronous(dname,adns.rr.NS)[0]
if response == 0:
dot_net.append("Y")
print(dname + ", is Y")
elif response == 300 or response == 30 or response == 60:
dot_net.append("N")
print(dname + ", is N")
elif q.empty() == True:
q.task_done()
q = queue.Queue()
threads = []
for i in range(20):
t = threading.Thread(target=async_dns)
threads.append(t)
t.start()
for name in names:
q.put_nowait(name)
をキャッチする準備ができて取得することができます。 –
スレッドはasync_dns内で開始しますか? –
メインスレッドが終了すると、すべてのスレッドが終了するように簡単に作成できます。質問に_ [私の答え](http://stackoverflow.com/questions/38804988/what-does-sys-exit-really-do-with-multiple-threads/38805873#38805873)を参照してください_ sys.exitが実際に行うことあなたの場合、 'sys.exit()'を明示的に呼び出す必要はありませんが、スクリプトの最後の最後の 'for'ループの後に自動的に発生します。 – martineau