anyuan2002.com - vwin网

查找: 您的方位主页 > 网络频道 > 阅览资讯:python行列及实例代码的具体介绍

python行列及实例代码的具体介绍

vwin娱乐场
2016-11-21 11:45:57 来历:www.anyuan2002.com 【

python行列及实例代码的具体介绍

行列特性:先进先出(FIFO)——先进行列的元素先出行列。来历于咱们日子中的行列(先排队的先办完事)。

python行列及实例代码的具体介绍

Queue模块最常与threading模块一同构成出产-顾客模型,供给了一个适用于多线程编程的先进先出的数据结构,即行列。

该模块源码中包括5个类:

其间,Empty和Full是两个反常类,当行列的Queue.get(block=0)或许调用get_nowait()时,假如行列为空,则抛EmptyException反常。

同理,当行列的Queue.put(block=0)或许调用put_nowait()时,假如行列为抵达maxsize,则抛FullException反常。

其他三个类:

Queue类:典型的行列模型,FIFO先入先出。class Queue.Queue(maxsize) maxsize为行列长度,指明晰行列中能寄存的数据个数的上限。一旦抵达上限,刺进会导致阻 塞,

直到行列中的数据被消费掉。假如maxsize小于或许等于0,行列巨细没有约束。

LifoQueue类:承继自Queue,类似于仓库,先入后出。class Queue.LifoQueue(maxsize)

PriorityQueue类:承继自Queue,优先级行列,等级越低越先出来。class Queue.PriorityQueue(maxsize)

所以,只需搞定Queue类,就根本搞定Queue模块。

Queue类中常用的办法:

Queue.qsize() 回来行列的巨细
Queue.empty() 假如行列为空,回来True,反之False
Queue.full() 假如行列满了,回来True,反之False
Queue.full 与 maxsize 巨细对应

Queue.get([block[, timeout]]) 获取行列,timeout等待时刻 ,调用行列目标的get()办法从队头删去并回来一个项目。可选参数为block,默以为True。假如行列为空且block为True,get()就使调用线程暂停,直至有项目可用。假如行列为空且block为False,行列将引发Empty反常。

Queue.get_nowait()适当于Queue.get(False)

Queue.put(item)

写入行列,timeout等待时刻 ,调用行列目标的put()办法在队尾刺进一个项目。put()有两个参数,第一个item为必需的,为刺进项目的值;第 二个block为可选参数,默以为1。假如行列当前为空且block为1,put()办法就使调用线程暂停,直到空出一个数据单元。假如block为0,put办法将引发Full反常。

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

Queue.task_done()

在完结一项作业之后,Queue.task_done()函数向使命现已完结的行列发送一个信号

Queue.join()

实际上意味着比及行列为空,再履行其他操作

一个小的操练实例:

#coding:utf-8
import random, threading, time
import Queue
'''
完结了一个出产线程,用于往行列中增加随机数10个,
完结了一个消费线程,别离耗费奇数随机数和偶数随机数
'''

class producer(threading.Thread):
 def __init__(self,t_name,queue):
  threading.Thread.__init__(self,name=t_name)
  self.data = queue
 def run(self):
  for i in xrange(10):
   random_num = random.randint(1,99)
   print "%s : %s 出产了一个随机数\033[31;0m %d \033[0m放入行列中" % (time.ctime(),self.getName(),random_num)
   self.data.put(random_num)
   time.sleep(1)
  print "出产线程完结!!"


class consumer(threading.Thread):
 def __init__(self,t_name,queue):
  threading.Thread.__init__(self,name=t_name)
  self.data = queue
 def run(self):
  while True:
   try:
    tmp_num = self.data.get(1,5) #界说超时时刻5秒
    if tmp_num%2 == 0:
     print "%s : %s 耗费了一个行列中的偶数随机数\033[31;0m %d \033[0m" % (time.ctime(),self.getName(),tmp_num)
     time.sleep(2)
    else:
     print "%s : %s 耗费了一个行列中的奇数随机数\033[31;0m %d \033[0m" % (time.ctime(), self.getName(), tmp_num)
     time.sleep(2)
   except:
    print "消费线程完结!!" #一旦抵达超时时刻5秒,会抛反常,break退出循环
    break


def main():
 queue = Queue.Queue(0)
 pro = producer('Pro', queue)
 con = consumer('Con', queue)
 pro.start()
 con.start()
 pro.join()
 con.join()
 print 'All threads complete!!!'

if __name__ == '__main__':
 main()

感谢阅览,希望能协助到咱们,谢谢咱们对本站的支撑!


本文地址:http://www.anyuan2002.com/a/question/83643.html
Tags: python 详解 行列
修改:vwin网
关于咱们 | 联络咱们 | m88明升 | 网站地图 | Sitemap | App | 回来顶部