It's possible you are simply not seeing the println output from a background thread, depending on how your repl etc is set up.
On Wed, 18 Mar 2015 3:19 pm Adrian Mowat <adrian.mo...@gmail.com> wrote: > Hi Erick > > Thanks for getting back to me. On my system, I wasn't seeing the contents > of my file being listed in the REPL. Your code is working fine though and > I can't see anything significantly different so I wonder if I had managed > to corrupt my session in some way. > > Anyway, it's good to know I'm on the right path. I'll post my solutions > as I get things up and running > > Cheers > > Adrian > > > > On Wednesday, 18 March 2015 13:45:33 UTC, Erick Pintor wrote: >> >> Hi Adrian, >> >> What is exactly the issue that you're facing? >> I did my own version and it seems to be working fine. >> >> Please, take a look and I hope it helps. >> >> (defn process-file [ch file] >> (async/thread >> (with-open [input (io/reader file)] >> (doseq [line (line-seq input)] >> (async/>!! ch line))))) >> >> (defn parse [line] >> (str "Parsed: " line)) ; change it to do whatever you want >> >> (defn mapping [ch] >> (async/map parse [ch])) >> >> (defn start [] >> (let [events (mapping >> (async/chan))] >> (process-file events "10_events.json") >> (async/go-loop [] >> (let [v (async/<! events)] >> (println v) >> (recur))))) >> >> About your approach. For me, it seems a legitimate usage for core.async. >> Please, send us your impressions once you finish. >> >> Cheers, >> >> >> Em terça-feira, 17 de março de 2015 09:52:17 UTC-3, Adrian Mowat escreveu: >>> >>> Hi, >>> >>> I've played around with core.async a bit but now I'm trying to use it >>> for a real project and I'm running into a problem getting data off a file >>> and into a channel on the JVM (i.e. as opposed to ClojureScript) >>> >>> I have around 1GB of data sitting in a file. Each line of the file >>> contains a separate JSON document. There are different types of document >>> in the file and I would like use core.async to setup a pipeline of >>> concurrent operations as follows so I can start processing the data before >>> I've finished reading the file. >>> >>> 1. Stream the raw data out of the file one line at a time, parse it as >>> JSON and write each line to channel (1) >>> 2. Read channel (1) and divide the messages up by type and write them to >>> new channels (2..n) >>> 3. Read channels (2..n) and apply business logic as appropriate >>> >>> I'd like the initial read to run in it's own thread because it will be >>> IO blocking. The others can run in core.async's thread pool >>> >>> I'm running into problems getting channels (1) and (2) to talk to one >>> another. Here's my initial spike and I would expect it to write the 10 >>> lines of json from the example file to stdout. >>> >>> (defn file-to-chan [ch file] >>> (do >>> (async/thread >>> (with-open [rdr (io/reader file)] >>> (doseq [line (line-seq rdr)] >>> (>!! ch line)))) >>> ch)) >>> >>> (defn parse-line [s] >>> (json/parse-string s (comp keyword str/lower-case))) >>> >>> (def events (chan 1 (map parse-line))) >>> >>> (go >>> (while true >>> (println (<! events)))) >>> >>> (file-to-chan events "10_events.json") >>> >>> I have a few questions... >>> >>> * Can anyone help me understand what's going wrong? (I'm sure it's >>> something silly, but I'm going cross eyed looking at it) >>> * It's effectively a batch process. Is this an appropriate use case for >>> core.async? >>> * If so, am I on the right track or is there a better way to approach >>> this? >>> >>> Many Thanks >>> >>> Adrian >>> >>> >>> >>> >>> >>> -- > 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.