我有一个类似的问题,我必须说排队。排队是相当好,但有一块失踪的拼图。以下类有助于确保获取的对象返回池。包括示例。
我已经允许两种方法使用这个类,用关键字或者用析构函数封装对象。首选with关键字,但如果由于某种原因不能/不想使用它(最常见的是需要来自多个队列的多个对象),则至少可以使用with关键字。如果您选择使用该方法,则会应用有关不调用析构函数的标准免责声明。
希望这能帮助那些和我和OP有同样问题的人。class qObj():
_q = None
o = None
def __init__(self, dQ, autoGet = False):
self._q = dQ
if autoGet == True:
self.o = self._q.get()
def __enter__(self):
if self.o == None:
self.o = self._q.get()
return self.o
else:
return self.o
def __exit__(self, type, value, traceback):
if self.o != None:
self._q.put(self.o)
self.o = None
def __del__(self):
if self.o != None:
self._q.put(self.o)
self.o = None
if __name__ == "__main__":
import Queue
def testObj(Q):
someObj = qObj(Q, True)
print 'Inside func: {0}'.format(someObj.o)
aQ = Queue.Queue()
aQ.put("yam")
with qObj(aQ) as obj:
print "Inside with: {0}".format(obj)
print 'Outside with: {0}'.format(aQ.get())
aQ.put("sam")
testObj(aQ)
print 'Outside func: {0}'.format(aQ.get())
'''
Expected Output:
Inside with: yam
Outside with: yam
Inside func: sam
Outside func: sam
'''