1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python多线程锁有没有优先级别_全面解析python线程优先级队列(queue)原理

python多线程锁有没有优先级别_全面解析python线程优先级队列(queue)原理

时间:2023-03-07 15:06:13

相关推荐

python多线程锁有没有优先级别_全面解析python线程优先级队列(queue)原理

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() 实际上意味着等到队列为空,再执行别的操作#!/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"

以上程序执行结果: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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。