zhangbinmy 发表于 2017-4-26 10:07:05

python queue模块的特点

  python queue模块有三种队列

pythonqueue模块的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(])
获取队列,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()

看完上面再结合下python 多线程应用的例子会更好的理解!
页: [1]
查看完整版本: python queue模块的特点