Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26324113
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Python/Ruby

2010-04-29 23:36:16

python中的Queue模块

[整理时间:2010-4-29

有三种队列

In a FIFO queue, the first tasks added are the first retrieved. In a LIFO queue, the most recently added entry is the first retrieved (operating like a stack). With a priority queue, the entries are kept sorted (using the module) and the lowest valued entry is retrieved first.

笔记:FIFO队列先进先出。LIFO类似于堆。即先进后出。还有一种是优先级队列级别越低越先出来。

针对这三种队列分别有三个构造函数

class Queue.Queue(maxsize)         FIFO

class Queue.LifoQueue(maxsize)     LIFO

class Queue.PriorityQueue(maxsize) 优先级队列

介绍一下此包中的常用方法

Queue.qsize()
返回队列的大小

Queue.empty()
如果队列为空,返回True,反之False

Queue.full()
如果队列满了,返回True,反之False。。queue.full maxsize 大小对应

Queue.get([block[, timeout]])
获取队列,timeout等待时间

Queue.get_nowait()
相当Queue.get(False).        非阻塞

Queue.put(item)
写入队列,timeout等待时间

Queue.put_nowait(item)
相当Queue.put(item, False).

Queue.task_done()
在完成一项工作之后,Queue.task_done() 函数向任务已经完成的队列发送一个信号。

Queue.join()
实际上意味着等到队列为空,再执行别的操作

 

#-*- coding:utf-8 -*-

import Queue

import threading

import time

import random

q = Queue.Queue(0)    #当有多个线程共享一个东西的时候就可以用它了

NUM_WORKERS = 3

class MyThread(threading.Thread):

    def __init__(self,input,worktype):

        self._jobq = input

        self._work_type = worktype

        threading.Thread.__init__(self)

    def run(self):

        while True:

            if self._jobq.qsize() > 0:

                job = self._jobq.get()

                worktype = self._work_type

                self._process_job(job,worktype)

            else:break

    def _process_job(self,job,worktype):

        doJob(job)

 

def doJob(job):

    time.sleep(random.random() * 3)

    print "doing",job

 

if __name__ == '__main__':

    print "begin ...."

    for i in range(NUM_WORKERS * 2):

        q.put(i)        #放入到任务队列中去

    print "job q size:",q.qsize()

    for x in range(NUM_WORKERS):

        MyThread(q,x).start()

       

 

 

 

阅读(926) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~