+ :released: Tue Oct 30 2012
+ reworked Dogpile's API into a new object called Lock.
+ Lock presents just one set of arguments for locking within
+ one constructor call, and provides the "comprehensive" caching
+ pattern that is what's desired in the vast majority of cases.
+ The Dogpile class is now legacy, and
+ builds its various usage patterns on top of Lock.
+ Fixed the dependency on storing "creationtime" locally in memory;
+ this caused dogpile pileups for a missing cache value when used in multiple-process
+ environments. The new Lock object now checks the value_and_created_fn()
+ an extra time within the "lock acquired" phase so that multiple writers
+ who entered the block don't rely upon a memory-only version of creation
+ :released: Tue Sep 25 2012
+ repair setup.py so that tests don't install,
+ :released: Wed Jun 13 2012
+ :released: Sun Apr 15 2012
+ py3k compatibility is in-place now, no
+ :released: Sat Apr 14 2012
+ Renamed the project again - to dogpile.core.
+ Package has been reorganized so that "dogpile"
+ is a pure namespace package. The base dogpile
+ features are now in "dogpile.core".
+ :released: Fri Mar 30 2012
+ expire time of None means "never expire".
+ :released: Fri Dec 23 2011
+ Add new "nameregistry" helper. Another fixture
+ derived from Beaker, this allows the ad-hoc creation of
+ a new Dogpile lock based on a name, where all other
+ threads calling that name at the same time will get
+ the same Dogpile lock. Allows any number of
+ logical "dogpile" actions to carry on concurrently
+ without any memory taken up outside of those operations.
+ To support the use case supported by nameregistry, added
+ value_and_created_fn to dogpile.acquire(). The idea
+ is that the value_and_created_fn can return
+ (value, createdtime), so that the creation time of the
+ value can come from the cache, thus eliminating the
+ need for the dogpile lock to hang around persistently.
+ :released: Sun Oct 23 2011
+ change name to lowercase "dogpile".