python带锁的队列
来源:互联网 发布:女子淘宝被诬陷差评师 编辑:程序博客网 时间:2024/05/21 08:43
__author__ = 'Mrsong'
#encoding='utf-8'
import queue
import threading
class ConcurrentQueue:
def __init__(self, capacity = -1):
self.__capacity = capacity #初始化队列大小
self.__mutex = threading.Lock() #初始化互斥量
self.__cond = threading.Condition(self.__mutex) #初始化条件变量
self.__queue = queue.Queue() #初始化队列
def get(self):
if self.__cond.acquire(): #获取互斥锁和条件变量,python中threading条件变量默认包含互斥量,因此只需要获取条件变量即可
while self.__queue.empty():
self.__cond.wait() #条件变量等待
elem = self.__queue.get()
self.__cond.notify()
self.__cond.release()
return elem
def put(self,elem):
if self.__cond.acquire():
while self.__queue.qsize() >= self.__capacity:
self.__cond.wait()
self.__queue.put(elem)
self.__cond.notify()
self.__cond.release()
def clear(self):
if self.__cond.acquire():
self.__queue.queue.clear()
self.__cond.release()
self.__cond.notifyAll()
def empty(self):
is_empty = False;
if self.__mutex.acquire(): #只需要获取互斥量
is_empty = self.__queue.empty()
self.__mutex.release()
return is_empty
def size(self):
size = 0
if self.__mutex.acquire():
size = self.__queue.qsize()
self.__mutex.release()
return size
def resize(self,capacity = -1):
self.__capacity = capacity
#encoding='utf-8'
import queue
import threading
class ConcurrentQueue:
def __init__(self, capacity = -1):
self.__capacity = capacity #初始化队列大小
self.__mutex = threading.Lock() #初始化互斥量
self.__cond = threading.Condition(self.__mutex) #初始化条件变量
self.__queue = queue.Queue() #初始化队列
def get(self):
if self.__cond.acquire(): #获取互斥锁和条件变量,python中threading条件变量默认包含互斥量,因此只需要获取条件变量即可
while self.__queue.empty():
self.__cond.wait() #条件变量等待
elem = self.__queue.get()
self.__cond.notify()
self.__cond.release()
return elem
def put(self,elem):
if self.__cond.acquire():
while self.__queue.qsize() >= self.__capacity:
self.__cond.wait()
self.__queue.put(elem)
self.__cond.notify()
self.__cond.release()
def clear(self):
if self.__cond.acquire():
self.__queue.queue.clear()
self.__cond.release()
self.__cond.notifyAll()
def empty(self):
is_empty = False;
if self.__mutex.acquire(): #只需要获取互斥量
is_empty = self.__queue.empty()
self.__mutex.release()
return is_empty
def size(self):
size = 0
if self.__mutex.acquire():
size = self.__queue.qsize()
self.__mutex.release()
return size
def resize(self,capacity = -1):
self.__capacity = capacity
0 0
- python带锁的队列
- 带Max函数的队列
- 带模板的链队列
- python的优先权队列
- Python的队列
- Python的优先级队列
- Python的队列其它
- LoaderQueue:带优先级的加载队列
- LoaderQueue:带优先级的加载队列
- 带模板的顺序循环队列
- 带结构体的队列 进出实例
- java 自带的消息队列
- python 带default的switch
- Python自带的服务器
- 带cookies的python爬虫
- Python带步进的切片
- Python函数带*的参数
- python的优先队列示例
- Web测试技术--Java平台
- 老北区小心眼的解放
- sharepoint 访问page 下面的页面突然404
- hdu2056 Rectangles
- some svn problem solutions
- python带锁的队列
- Web功能测试的注意事项
- ZooKeeper小结(一)原理解析
- 新手使用xc3s50an-dk@liuger 开发板
- 神经网络反向传播的数学原理
- 导入项目乱码解决方法
- 网站测试
- php、java、android、ios通用的3des+base64加密方法
- Java实现一个简单的两人五子棋游戏(二) 画棋盘