python 线程安全的对象池

来源:互联网 发布:关于阴间的电影网络 编辑:程序博客网 时间:2024/05/09 12:19

from Queue import Queue,Empty,Full
from threading import Lock

class SafeThreadPool(object):


    def __init__(self, createFun, initSize=1, maxSize=1):


        self.__queue = Queue()
        self.__locker = Lock()


        for i in xrange(initSize):
            self.__queue.put_nowait(createFun())


        self.__count = initSize
        self.__maxSize = maxSize
        self.__createFun = createFun


    def getObject(self):
        try:
            return self.__queue.get_nowait()
        except Empty:
            self.__tryNewOb()
            try:
                return self.__queue.get_nowait()
            except Empty:
                return None


    def release(self, obj):
        try:
            if obj is None:
                return
            self.__queue.put_nowait(obj)
        except Full:
            return


    def __tryNewOb(self):
        self.__locker.acquire()
        if self.__count < self.__maxSize:
            try:
                self.__queue.put_nowait(self.__createFun())
                self.__count =+ 1
            except Full:
                pass
        self.__locker.release()

0 0
原创粉丝点击