python 线程安全的对象池

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值