Thanks Guys! Hitesh you were right about rand-nth. I switched to rand-int, 
which is much faster.

I found a way. It may not be the most optimal way but I can get about 50000 
files in 2-3 secs. 

I am using cheshire to parse json and pjson to write it back. 

(ns jsonworker.core
  (:require [cheshire.core :refer [parse-stream] ]
            [pjson.core :refer [read-str write-str get-charset]]))


(defn parse-json
  [file-loc]
  (parse-stream (clojure.java.io/reader file-loc)))

(def json-template (parse-json "resources/test_1918203.json"))

(def fol-location "/Users/json/json_output")

(defn update-ref [json-string id]
  (assoc-in json-string ["basicInformation" "myId"] id))


(defn gen-files [folder-loc text id]
  (spit (str folder-loc "/test_"  id ".json") (write-str text)))


(defn run-me [x] 
  (dotimes [_ x]
    (let [iid (rand-int 1e9)]
      (gen-files fol-location (update-ref json-template iid) iid))))


(defn run-in-parallel
"run-in-parallel runs 500 different threads.
you can give each thread number of files you want to generate
Eg: run-in-parallel 100 will generate 500*100 = 50000 files"
  [y]
  (dotimes [_ 500]
    (future
      (.start (Thread. (run-me y))))))




On Monday, August 22, 2016 at 3:10:05 PM UTC-4, hitesh wrote:
>
> This looks like it's doing too much work to simply generate a random 
> integer.  Are you sure you want to build a lazy list of 999,000 integers 
> and randomly select into it for every invocation?  The garbage collector 
> will be working overtime.
>
> (defn update-individual [json-string]
>   (assoc-in json-string ["someInfo" "moreInfo"]
>             (rand-nth  (range 1000 1000000))))
>
> This should get you a random number in the range without as much effort.
>
> (+ 1000 (rand-int 999000))
>
>
>
> On Saturday, August 20, 2016 at 1:51:11 PM UTC-4, Abhinav Gogna wrote:
>>
>> Hello,
>>
>> I am trying to generate lot of files using futures but it hasn't sped up 
>> the process that hoped for. Here is the code I am using. Can someone point 
>> what I am doing wrong?
>>
>> (ns jsonworker.core
>>   (:require [cheshire.core :refer :all ]))
>>
>>
>> (defn parse-json
>>   [file-loc]
>>   (parse-stream (clojure.java.io/reader file-loc)))
>>
>> (def json-template (atom (parse-json "resources/individual_1918203.json"
>> )))
>>
>> (def fol-location "/Users/json/json_output")
>>
>> (defn update-individual [json-string]
>>   (assoc-in json-string ["someInfo" "moreInfo"]
>>             (rand-nth  (range 1000 1000000))))
>>
>>
>> (defn gen-files [folder-loc text]
>>   (spit (str folder-loc "/newfile_" (rand-int 1e7)) text))
>>
>>
>> (defn run-me [x]
>>   (future  
>>     (dotimes [_ x]
>>       (swap! json-template update-individual)
>>       (gen-files fol-location @json-template))))
>>
>>
>> Thanks!
>>
>

-- 
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