【发布时间】:2016-08-29 02:04:26
【问题描述】:
使用下面的脚本,我似乎无法退出线程。该脚本运行顺利,没有问题,但完成后永远不会退出。我仍然可以看到线程活着,我必须使用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 内启动?
-
您可以轻松地做到这一点,以便在主线程退出时所有线程都退出。请参阅my answer 问题sys.exit 对多线程有什么作用? 请注意,在您的情况下,您不需要显式调用
sys.exit(),它会在最终的@987654325 之后自动发生@循环在脚本末尾。
标签: python multithreading