Your loop pattern should work. (I've used this pattern before.) Just a sanity check: you *are* running this function in a different thread, right? Because whatever thread calls this function *will* block forever, whether the queue is empty or not. And unless you provide some side-effecting process-fn there will be no evidence that the thread is doing anything. (I.e. your first function will hang forever and appear to do nothing.)
On Wednesday, November 12, 2014 10:43:57 AM UTC-6, Sam Raker 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.