Your loop seems to work as expected: user=> (def in-queue (java.util.concurrent.LinkedBlockingQueue. (range 1 11))) #'user/in-queue user=> (future (loop [res (.take in-queue)] (prn res) (recur (.take in-queue)))) #<core$future_call$reify__6320@2b106ce4: :pending>1
2 3 4 5 6 7 8 9 10 user=> (.put in-queue 11) nil11 user=> What happens when you just (.take in-queue)? -- Henrik On Wed, Nov 12, 2014 at 5:43 PM, Sam Raker <sam.ra...@gmail.com> wrote: > I'm using Twitter's HBC library to read from Twitter's public stream. HBC > stores results in a LinkedBlockingQueue, from which you can then `.take` > tweets and do stuff to them (in my case, doing some > processing/normalization, then storing them in CouchDB). I've been > struggling with how exactly best to do this, though. I tried `doseq`, but > it stops when the queue is empty, which isn't what I want. Since my code is > basically entirely IO, `map` and other lazy stuff causes me problems. Next, > I reached for `loop`: > > (defn process-stream-nores > ([in-queue] > (process-stream-nores in-queue identity)) > ([in-queue process-fn] > (loop [res (.take in-queue)] > (process-fn (parse-string res true)) > (recur (.take in-queue))))) > > > (where `in-queue` is a LinkedBlockingQueue). Unfortunately, this just > hangs, even when the LinkedBlockingQueue isn't empty (I'd expect it to hang > when the queue is empty, since the queue blocks until it gets something). > > I've also tried > > ... > (while true (process-fn (parse-string (.take in-queue) true)) > ... > > but that 1) also hangs, and 2) seems profoundly un-idiomatic. > > I want to continuously take from the queue, process the tweet, and then > put it in CouchDB. (I'm planning on putting this in a Thread that I can > stop when I have enough tweets.) I feel like loop is the right way to go, > but I don't understand it very well, and can't get it to work. Any help > would be greatly appreciated. > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.