Используя сценарий ниже, я не могу выйти из потоков. Скрипт работает без проблем, но никогда не завершается. Я все еще вижу поток в живых, я должен использовать 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