python queue模块学习

发布时间:2019-10-12编辑:脚本学堂
本文介绍 python queue模块的相关知识,供大家学习参考。

    本文介绍 python queue模块的相关知识,供大家学习参考。
    
     python queue模块有三种队列 

    1.python queue模块的FIFO队列先进先出。
    2.LIFO类似于堆。即先进后出。
    3.还有一种是优先级队列级别越低越先出来。

    针对这三种队列分别有三个构造函数 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

您可能感兴趣的文章:
1.学习python 多线程应用
2.学习Python的多线程

上一篇:返回列表
下一篇:python SGMLParser模块