James, Some reading is required to understand your code (never used volatile!) but thanks for direction. I will try this way.
W dniu piątek, 31 lipca 2015 17:39:50 UTC+2 użytkownik James Reeves napisał: > > The way I'd do it is to write a function that caches the output writer or > stream. When the cache expires, the function closes the old writer and > opens a new one to the new file. > > In the example below, I'm assuming you have a function that returns the > same name for the same hour. > > (let [cache (volatile! nil)] > (defn get-output-writer [] > (locking cache > (let [filename (get-output-filename-for-this-hour)] > (when (or (nil? @cache) (not= (:filename @cache) filename)) > (if-let [writer (:writer @cache)] (.close writer)) > (vreset! cache {:filename filename, :writer (io/writer filename) > }))) > (:writer @cache)))) > > Note that I'm using the locking macro to ensure that the function cannot > be executed simultaneously by multiple threads. > > - James > > > On 31 July 2015 at 13:23, Marcin Jurczuk <mjur...@gmail.com <javascript:>> > wrote: > >> Hi all, >> >> This is my first post here so please be compassionate :) >> >> I'm evaluating clojure for some of my purposes and I've stuck on task >> that I don't know to handle. >> I have applicatin that is receiving a lot of data and writing some >> results to a file. >> However once per hour this output file must be changes so data are in >> chunks. >> I have working solution with writing to one file but I don't know where >> to start code for changeing "this on the fly". >> What I need is to avoid open-close cycle with every piece of data to save >> since data stream is big.I need only close one file and open another one >> (name generated on some rules) where data will be continously written once >> per hour. >> >> I have this app written in golang where there are just two goroutines and >> main code retriving data. >> Writing goroutine beside data to write channel also have filename channel >> and when it receives message here it just close current file and open >> another but file handle var (i.e outFile) is always the same. >> This file swap is made with mutex arround and other protection so there >> is no case when write is made to a closed file. >> >> There is another timer goroutine that every ~§1h just calculate new >> filename and sends message to write goroutine. >> Works like expected :) >> >> As a proof of concept I'm trying to rewrite this in clojure. >> Summary it's like kind of syslog which have to change destination file >> periodically. >> >> Kind regards to everyone. >> >> Marcin. >> >> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clo...@googlegroups.com >> <javascript:> >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+u...@googlegroups.com <javascript:> >> 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+u...@googlegroups.com <javascript:>. >> 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.