Python学习之Threading, Queue

Threading, Queue

  • 利用Queue对象先进先出的特性,将每个生产者的数据一次存入队列,而每个消费者将依次从队列中取出数据

    # coding:utf-8
    import threading        # 导入threading模块
    import Queue            # 导入Queue模块
    
    
    class Producer(threading.Thread):  # 定义生产者类
    
        def __init__(self, threadname):
            threading.Thread.__init__(self, name=threadname)
    
        def run(self):
            global queue    # 声明queue为全局变量
            queue.put(self.getName())   # 调用put方法将线程名添加到队列中
            print self.getName(), 'put ', self.getName(), ' to queue'
    
    
    class Consumer(threading.Thread):  # 定义消费者类
    
        def __init__(self, threadname):
            threading.Thread.__init__(self, name=threadname)
    
        def run(self):
            global queue
            # 调用get方法获取队列中内容
            print self.getName(), 'get ', queue.get(), 'from queue'
    
    
    queue = Queue.Queue()   # 生成队列对象
    plist = []      # 生成者对象列表
    clist = []      # 消费者对象列表
    
    for i in range(10):
        p = Producer('Producer' + str(i))
        plist.append(p)     # 添加到生产者对象列表
    for i in range(10):
        c = Consumer('Consumer' + str(i))
        clist.append(c)     # 添加到消费者对象列表
    
    for i in plist:
        i.start()       # 运行生产者线程
        i.join()
    for i in clist:
        i.start()       # 运行消费者线程
        i.join()
    
    # Use method:`run`
    for i in plist:
        i.run()       # 运行生产者线程
    for i in clist:
        i.run()       # 运行消费者线程
    

感谢:原文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值