全面解析python线程优先级队列(queue)原理


本文摘自php中文网,作者Tomorin,侵删。

Python的Queue模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue。这些队列都实现了锁原语,能够在多线程中直接使用。可以使用队列来实现线程间的同步。

Queue模块中的常用方法:

1.Queue.qsize() 返回队列的大小

2.Queue.empty() 如果队列为空,返回True,反之False

3.Queue.full() 如果队列满了,返回True,反之False

4.Queue.full 与 maxsize 大小对应

5.Queue.get([block[, timeout]])获取队列,timeout等待时间

6.Queue.get_nowait() 相当Queue.get(False)

7.Queue.put(item) 写入队列,timeout等待时间

8.Queue.put_nowait(item) 相当Queue.put(item, False)

9.Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号

10.Queue.join() 实际上意味着等到队列为空,再执行别的操作

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

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import Queue

import threading

import time

exitFlag = 0

class myThread (threading.Thread):

def __init__(self, threadID, name, q):

threading.Thread.__init__(self)

self.threadID = threadID

self.name = name

self.q = q

def run(self):

print "Starting " + self.name

process_data(self.name, self.q)

print "Exiting " + self.name

def process_data(threadName, q):

while not exitFlag:

queueLock.acquire()

if not workQueue.empty():

data = q.get()

queueLock.release()

print "%s processing %s" % (threadName, data)

else:queueLock.release()

time.sleep(1)

threadList = ["Thread-1", "Thread-2", "Thread-3"]

nameList = ["One", "Two", "Three", "Four", "Five"]

queueLock = threading.Lock()

workQueue = Queue.Queue(10)

threads = []

threadID = 1

# 创建新线程

for tName in threadList:

thread = myThread(threadID, tName, workQueue)

thread.start()

threads.append(thread)

threadID += 1

# 填充队列

queueLock.acquire()

for word in nameList:

workQueue.put(word)

queueLock.release()

# 等待队列清空

while not workQueue.empty():

pass

# 通知线程是时候退出

exitFlag = 1

# 等待所有线程完成

for t in threads:

t.join()

print "Exiting Main Thread"

以上程序执行结果:

1

2

3

4

5

6

7

8

9

10

11

12

Starting Thread-1

Starting Thread-2

Starting Thread-3

Thread-1 processing One

Thread-2 processing Two

Thread-3 processing Three

Thread-1 processing Four

Thread-2 processing Five

Exiting Thread-3

Exiting Thread-1

Exiting Thread-2

Exiting Main Thread

以上就是全面解析python线程优先级队列(queue)原理的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

对numpy中布尔型数组的处理方法

编程Python是什么

gitignore文件是干嘛的

Python中的in是什么意思

pycharm代码跳转后退回操作详解

pytorch + visdom 处理简单分类问题

Python中或者怎么表示

基于类的视图简介

Python集合是可变类型吗

Python中累加怎么做

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...