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.

Reply via email to