使用下面的脚本,我似乎无法退出线程。脚本运行顺利,没有问题,但完成后从不退出。我仍然可以看到线程处于活动状态,我必须使用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)
答案 0 :(得分:0)
从队列中删除并返回一个项目。如果可选的args块为true且timeout为None(默认值),则在必要时阻止,直到某个项可用为止。如果timeout是一个正数,它会阻止最多超时秒,如果在该时间内没有可用的项,则会引发Empty异常。否则(块为假),如果一个项立即可用,则返回一个项,否则引发Empty异常(在这种情况下忽略超时)。
请记得检查你的队列。
请参阅queue的文档。
答案 1 :(得分:0)
您的帖子卡在dname = q.get()
如果您到达空队列,q.get()
将永远等待值到达。
您可以将get
替换为get_nowait()
,但要准备好抓住Queue.Empty
执行