主线程和子线程都运行完了,怎么还是没有退出?下面是代码,会一直运行,这是为什么?
来源:11-3 线程间通信 - 共享变量和 Queue

Yan雪杉
2018-06-24
from queue import Queue import time import threading def get_detail_html(queue): #爬取文章详情页 url = queue.get() # for url in detail_url_list: print("get detail html started") time.sleep(2) print("get detail html end") queue.task_done() def get_detail_url(queue): # 爬取文章列表页 print("get detail url started") # time.sleep(4) for i in range(5): queue.put("http://projectsedu.com/{id}".format(id=i)) print("get detail url end") #1. 线程通信方式- 共享变量 if __name__ == "__main__": detail_url_queue = Queue(maxsize=1000) thread_detail_url = threading.Thread(target=get_detail_url, args=(detail_url_queue,)) thread_detail_url.start() for i in range(6): html_thread = threading.Thread(target=get_detail_html, args=(detail_url_queue, )) html_thread.start() # # thread2 = GetDetailUrl("get_detail_url") start_time = time.time() # thread_detail_url1.start() # # thread1.join() # thread2.join() # detail_url_queue.task_done() detail_url_queue.join() #当主线程退出的时候, 子线程kill掉 print ("last time: {}".format(time.time()-start_time))
写回答
1回答
-
url = queue.get() 该方法会一直阻塞 导致一直无法运行到task_done你需要用get_nowait方法
012018-06-26
相似问题