아래 스크립트를 사용하면 스레드를 종료 할 수 없습니다. 스크립트는 문제없이 원활하게 실행되지만 완료되면 종료되지 않습니다. 나는 여전히 스레드가 살아 있음을 볼 수있다. 나는 그들을 죽이거 나 완전히 명령 행을 빠져 나가기 위해서 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)
Queue.Empty
이 스레드를 시작하기 전에 큐를 기입 잡을 수 있도록 준비 할 수 있습니다. –스레드가 async_dns 내부에서 시작합니까? –
주 스레드가 종료되면 모든 스레드가 종료되도록 쉽게 만들 수 있습니다. sys.exit이 실제로하는 질문에 [내 대답] (http://stackoverflow.com/questions/38804988/what-does-sys-exit-really-do-with-multiple-threads/38805873#38805873)을 참조하십시오. 당신의 경우에'sys.exit()'를 명시 적으로 호출 할 필요는 없으며, 스크립트의 마지막에있는'for' 루프 다음에 자동적으로 발생합니다. – martineau