Queue
解耦:使程序直接实现松耦合,修改一个函数,不会有串联关系。
提高处理效率:FIFO = 现进先出,LIFO = 后入先出。
# coding: utf-8
# 线程间通讯
# 1. 线程中通讯方式 - > 共享变量
# 2. 通过queue的方法通过线程的通讯
import threading
import Queue
import time
def get_detail_html(queue):
# 爬取文章详情
while 1:
print queue.qsize()
url = queue.get()
print url
print 'get_detail_html start'
time.sleep(2)
if queue.qsize() > 10:
queue.task_done()
if queue.empty():
# 主线程退出
queue.task_done()
break
def get_detail_url(queue):
# 爬取文章列表页
print queue.qsize
print 'get_detail_url start'
queue.put('cache_set123')
queue.put('cache_set')
queue.put('cache_set112')
time.sleep(2)
print 'get_detail_url end'
queue.task_done()
if __name__ == '__main__':
detail_url_queue = Queue.Queue(maxsize=1000)
print 1
threading_detail_url = threading.Thread(target=get_detail_url, args=(detail_url_queue,))
threading_detail_url.start()
html_thread = threading.Thread(target=get_detail_html, args=(detail_url_queue,))
html_thread.start()
threading_detail_url.join()
# 主线程收到 task_done信号结束
html_thread.join()
print '结束-------'
网友评论