Add 'object' to a stack with expiry timers and get notified when it expires
I would probably use threading.Timer for this. A Timer object will call a specified function with given arguments after a period of time. So write a function that returns a JSON object to the pool, and start a timer that specifies the specific JSON object that has been reserved. Additionally, you can cancel a timer before it fires, which you will want to do if the client actually requests the object before the reservation expires.
To keep track of the pool, I would probably use a dict where the JSON object is the key and the value is either None if the object is not checked out, or the Timer instance if it is checked out. A separate list could be used to keep track of what object should be given out next; pop() from the end of the list when taking an object out and append() it back on when it's returned. Beware of possible race conditions updating both of these structures!
I have a need to reserve an object (JSON) within my app for a period of time (typically 180 seconds) At some point the client may or may not come back and request this object by its key. 
The tricky part is that I need to be notified when this object expires so I can return it to the available pool if the client hasn't already requested it.
The obvious solutions are to use something like a timestamp in the database and then a periodic script to check for expired items but this doesn't feel like the nicest solution.
Ideally I'm looking for something like memcache that can call an event when an item expires, surely there is such a product out there?
My current framework is based around python, cherrpy, mongo, memcachce but I'm happy to add to it.