DB work is a IO operation, and IO shouldn't be done inside a go block (go blocks use limited thread pools).
So what about something like this? (defn handle-db [chan] (thread (while true (let [[data result] (<! c)] (run-db-transaction-as-normal data) (>! result :done))))) Now spin up a few of these: (def db-chan (let [c (chan 4)] (dotimes [x 4] (handle-db c)) c)) Now it's trivial to use this from a go block: (defn db-async [data] (go (let [c (chan)] (>! db-chan [data c]) (<! c)))) So this is the pattern: create processors using threads, then send data to those processors via a shared channel, passing in a response channel. Anyways, that's the way I'm thinking these days. Timothy On Wed, Jul 31, 2013 at 12:24 PM, Alice <dofflt...@gmail.com> wrote: > I have an async http handler and I don't want it to consume a thread. > > On Thursday, August 1, 2013 3:16:52 AM UTC+9, tbc++ wrote: > >> Why not use <!! ? >> >> Timothy >> >> >> On Wed, Jul 31, 2013 at 11:58 AM, Alice <doff...@gmail.com> wrote: >> >>> It doesn't produce a compile time error but I think it's not the correct >>> code because the transaction can be committed while insert-async! is still >>> executing. >>> >>> On Thursday, August 1, 2013 2:46:29 AM UTC+9, Sean Corfield wrote: >>> >>>> On Wed, Jul 31, 2013 at 10:29 AM, Alice <doff...@gmail.com> wrote: >>>> > (go >>>> > (jdbc/db-transaction [t-con db-spec] >>>> > (<! (insert-async! t-con :fruit {:name "apple"})))) >>>> >>>> Does this work: >>>> >>>> (jdbc/db-transaction [t-con db-spec] >>>> (go >>>> (<! (insert-async! t-con :fruit {:name "apple"})))) >>>> >>>> -- >>>> Sean A Corfield -- (904) 302-SEAN >>>> An Architect's View -- http://corfield.org/ >>>> World Singles, LLC. -- http://worldsingles.com/ >>>> >>>> "Perfection is the enemy of the good." >>>> -- Gustave Flaubert, French realist novelist (1821-1880) >>>> >>> -- >>> -- >>> 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 >>> >>> 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 >>> >>> For more options, visit this group at >>> http://groups.google.com/**group/clojure?hl=en<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. >>> >>> For more options, visit >>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out> >>> . >>> >>> >>> >> >> >> >> -- >> “One of the main causes of the fall of the Roman Empire was that–lacking >> zero–they had no way to indicate successful termination of their C >> programs.” >> (Robert Firth) >> > -- > -- > 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/groups/opt_out. > > > -- “One of the main causes of the fall of the Roman Empire was that–lacking zero–they had no way to indicate successful termination of their C programs.” (Robert Firth) -- -- 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/groups/opt_out.