Chinaunix首页 | 论坛 | 博客
  • 博客访问: 337807
  • 博文数量: 148
  • 博客积分: 2745
  • 博客等级: 少校
  • 技术积分: 1704
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-30 14:59
文章分类

全部博文(148)

文章存档

2013年(97)

2012年(7)

2011年(3)

2010年(41)

我的朋友

分类: Python/Ruby

2010-05-04 20:09:20

模块有三种队列

queue模块的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()

看完上面再结合下 的例子会更好的理解!
阅读(641) | 评论(0) | 转发(0) |
0

上一篇:python 学习

下一篇:python 学习

给主人留下些什么吧!~~