Sounds like a job for a future. Something like:

(->> job-list
  (partition-in-sublists 4)
  (map #(future (do-job-on-sublist %)))
  (mapv deref))

This is untested and written on a phone, so might not even be syntactically
correct, but the future calls will create new threds to execute the do-job
functions on the sublists, and the deref call on a future is blocking. If
the result from the futures is not important, I guess you could save some
memory by using map and doall instead of mapv, though I doubt it would make
any difference if you have only 4 sublists.

Alternatively, have you looked at pmap ?

On Wednesday, 17 September 2014, Beau Fabry <imf...@gmail.com> wrote:

> We don't have streams of data here, the long running tasks have
> side-effects. I would prefer to avoid adding another whole framework just
> to run a few long running jobs in p//.
>
> I have a list of jobs to do, I'm partitioning that list up into 4 sub
> lists to be worked through by 4 p// workers, I then want to block and wait
> until all 4 workers have finished their tasks.
>
> On Wednesday, September 17, 2014 3:27:07 AM UTC+10, larry google groups
> wrote:
>>
>>
>> This does not look correct to me. Perhaps someone else has more insight
>> into this. I am suspicious about 2 things:
>>
>> 1.) your use of doall
>>
>> 2.) your use of (thread)
>>
>> It looks to me like you are trying to hack together a kind of pipeline or
>> channel. Clojure has a wealth of libraries that can handle that for you.
>> The main thing you are trying to do is this:
>>
>> (long-running-widget-processor widget))
>>
>>
>> You go to some trouble to set up workers, all to ensure that
>> long-running-widget-processor is handled in its own thread.
>>
>> I would suggest you look at Lamina:
>>
>> https://github.com/ztellman/lamina
>>
>> In particular, look at pipelines:
>>
>> https://github.com/ztellman/lamina/wiki/Pipelines
>>
>>
>>
>>
>>
>> On Friday, September 5, 2014 1:46:02 AM UTC-4, Beau Fabry wrote:
>>>
>>> Is the kinda ugly  constant (doall usage a sign that I'm doing something
>>> silly?
>>>
>>> (let [num-workers 4
>>>       widgets-per-worker (inc (int (/ (count widgets) num-workers)))
>>>       bucketed-widgets (partition-all widgets-per-worker widgets)
>>>       workers (doall (map (fn [widgets]
>>>                               (thread
>>>                                 (doseq [widget widgets]
>>>                                   (long-running-widget-processor widget))
>>>                                 true))
>>>                            bucketed-widgets))]
>>>   (doall (map <!! workers)))
>>>
>>> https://gist.github.com/bfabry/ad830b1888e4fc550f88
>>>
>>> All comments appreciated :-)
>>>
>>> Cheers,
>>> Beau
>>>
>>  --
> 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
> <javascript:_e(%7B%7D,'cvml','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
> <javascript:_e(%7B%7D,'cvml','clojure%2bunsubscr...@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
> <javascript:_e(%7B%7D,'cvml','clojure%2bunsubscr...@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.

Reply via email to