Index of all namespaces
Pooling Library for Clojure
For pooling and caching objects which are costly to create.
get-pool takes a no argument function for object creation.
(def pool (get-pool (fn  :heavy-object)))
return from pool.
(borrow pool) ;=> :heavy-object (return pool :heavy-object)
Keyed Object Pool
get-keypool takes a single arity function for object creation.
(def pool (get-keypool (fn [k] (str :heavy k)))) (borrow pool :object) ;=> ":heavy:object" ; Return key and object (return pool :object ":heavy:object")
get-keypool takes optional kwargs for
passivate for finer control of object creation and deletion.
Caching although a different concept is provided in the library for caching objects which are threadsafe in themselves and thus can be shared instead of pooled, but are very costly to create.
get are the only available methods to work with.
get-cache take a single arity function on key for object creation.
(require '[pool.cache :as c]) (def cache (c/get-cache (fn [k] (print "once!") (Thread/sleep 1000) k))) (c/get cache 1) ;=> once! 1 ; Safeguards against multiple threads. (defn double-write [x] (future (c/get cache x)) (future (c/get cache x))) (double-write 5) ;=> once! ...
Copyright © 2014 kul
Distributed under the Eclipse Public License.