python queue队列类型及函数浅谈

本文主要介绍了python中的queue队列类型及函数用法,具有很好的参考价值,希望对大家有所帮助。

python queue队列类型及函数

1.队列的种类

Python queue模块的FIFO队列先进先出。 class queue.Queue(maxsize)

LIFO类似于堆,即先进后出。 class queue.LifoQueue(maxsize)

还有一种是优先级队列级别越低越先出来。 class queue.PriorityQueue(maxsize)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

import queue

# 先进先出队列

queue_obj = queue.Queue()

for i in range(3):

    queue_obj.put(i)

for i in range(3):

    print(queue_obj.get())

"""执行结果

0

1

2

"""

# 先进后出队列,类似于堆栈

queue_obj = queue.LifoQueue()

for i in range(3):

    queue_obj.put(i)

for i in range(3):

    print(queue_obj.get())

"""执行结果

2

1

0

"""

# 优先级队列

import Queue

import threading

class Job(object):

    def __init__(self, priority, description):

        self.priority = priority

        self.description = description

        print 'Job:',description

        return

    def __cmp__(self, other):

        return cmp(self.priority, other.priority)

q = Queue.PriorityQueue()

q.put(Job(3, 'level 3 job'))

q.put(Job(10, 'level 10 job'))

q.put(Job(1, 'level 1 job'))

def process_job(q):

    while True:

        next_job = q.get()

        print 'for:', next_job.description

        q.task_done()

workers = [threading.Thread(target=process_job, args=(q,)),

        threading.Thread(target=process_job, args=(q,))

        ]

for w in workers:

    w.setDaemon(True)

    w.start()

q.join()

2.队列函数

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

maxsize = 10

queue_obj = queue.Queue(maxsize)  # maxsize 代表队列的上限, 如果队列已满, 则插入时需要等待, maxsize为零或负数时.队列没有限制

queue_obj.get(block=True, timeout=None# block为True时,表示等待获取,直至timeout超时

queue_obj.get_nowait()  # 当获取不到元素时,报错

queue_obj.put(item="待插入的元素", block=True, timeout=None# block为True时,表示等待插入,直至timeout超时

queue_obj.put_nowait('待插入的元素'# 当不能插入元素时报错

queue_obj.empty()  # 队列为空时,返回True

queue_obj.full()  # 如果队列满时,返回True

queue_obj.task_done()  # 在每次获取队列中的元素, 操作完成之后, 调用该函数告诉队列我已经使用完成, 主要是给join函数使用

queue_obj.join()  # 等待队列内的元素全部被获取后, 再接触阻塞(直至所有的任务全部task_done)

"""下面的例子验证toask_done和join的关系"""

for i in range(3):

    queue_obj.put(i)  # 这里像队列中添加三个元素

queue_obj.get()  # 这里获取队列中的消息

queue_obj.task_done()

queue_obj.get()  # 这里获取队列中的消息

queue_obj.task_done()

queue_obj.get()  # 这里获取队列中的消息

queue_obj.task_done()

queue_obj.join()

print('直至队列中的所有元素全部都被取出, join函数才不会阻塞, 如果只执行了两次task_done函数, 则join会一直阻塞')

来源:微点阅读   https://www.weidianyuedu.com

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值