多线程间的通讯方式

  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 '结束-------'

你可能感兴趣的:(多线程间的通讯方式)