文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档> python 学习

python 学习

时间:2010-05-04  来源:m4774411wang

python queue 模块有三种队列

python 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()

看完上面再结合下python 多线程应用 的例子会更好的理解!
相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载