A clojure implementation of python's queue class
Clojure
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src/sync_q
test/sync_q/test
.gitignore
README.md
project.clj

README.md

sync-q

A minimal implementation of Python's synchronized queue class http://docs.python.org/library/queue.html

Summary

The aim is to make queues that can be used to safely exchange information between multiple threads. The are 4 basic operations

  • Create a queue
  • Put a value onto a queue
  • Get a value from the queue without blocking
  • Get a value from the queue blocking until a value is available

Available from clojars: http://clojars.org/sync-q

Basic Usage

(use 'sync-q.core)

(def q (new-queue)) ;; Make a new queue

(qsize q) ;; How many items are in the queue?
0

(qempty? q) ;; Is the queue empty?
true

(put q :1) ;; Put a value into the queue

(put q :2) ;; Put another one

(get-wait q) ;; Get something
:1

(get-nowait q) ;; Get something else
:2

(get-nowait q) ;; Nothing on the queue now
nil

(future (Thread/sleep 5000) (put q :hello)) ;; Put something on the queue in 5 seconds

(get-wait q) ;; Wait until something becomes available
:hello ;; Returns the value after our thread has put the value onto the queue

License

Copyright (C) 2012 Matthew Williams

Distributed under the Eclipse Public License, the same as Clojure.