线程没有退出,程序也不会退出

时间:2016-08-29 02:04:27

标签: python multithreading

使用下面的脚本,我似乎无法退出线程。脚本运行顺利,没有问题,但完成后从不退出。我仍然可以看到线程处于活动状态,我必须使用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)

2 个答案:

答案 0 :(得分:0)

  

从队列中删除并返回一个项目。如果可选的args块为true且timeout为None(默认值),则在必要时阻止,直到某个项可用为止。如果timeout是一个正数,它会阻止最多超时秒,如果在该时间内没有可用的项,则会引发Empty异常。否则(块为假),如果一个项立即可用,则返回一个项,否则引发Empty异常(在这种情况下忽略超时)。

请记得检查你的队列。

请参阅queue的文档。

答案 1 :(得分:0)

您的帖子卡在dname = q.get()

如果您到达空队列,q.get()将永远等待值到达。

您可以将get替换为get_nowait(),但要准备好抓住Queue.Empty执行