If you don't want to split at the consumer I would recommend adding another channel, and piping it with a cat xform as mentioned above.
On Oct 11, 2017 3:28 AM, "JokkeB" <jahve...@gmail.com> wrote: > Thanks. I'm not interested in reading the messages as pairs, I just need > to make sure nothing gets in between them. I think I'll choose some way to > merge the messages, for example just a vector like you suggested, and then > have the end consumer recognise and split the vector. I guess splitting the > vector into two messages somewhere before the end consumer can't be made > deterministic. > > keskiviikko 11. lokakuuta 2017 8.02.40 UTC+3 Rangel Spasov kirjoitti: >> >> I think simply wrapping the two values in a vector is the only thing >> that's needed in this case. Simply do a put like (>!! ch [my-val-1 >> my-val-2]) and take from the channel from another place. If my-val-1 and >> my-val-2 are not immediately available, you can have a separate mechanism >> (atoms, (loop [...] (recur ...)) or another set of core.async channels >> perhaps) that "collects" them until they are ready to be sent together as >> one value. >> >> partition-all on its own does not really help with the ordering here. For >> example: >> >> (let [ch (chan 42 (partition-all 2))] >> (>!! ch :x') >> (thread ;in another >> thread far, far away >> (<!! (timeout (rand-int 1000))) ;simulate busy >> for random 0-99ms >> ;put value on ch >> (>!! ch :y')) >> >> (<!! (timeout (rand-int 1000))) ;simulate busy >> for random 0-99ms >> (>!! ch :x'') >> >> ;take from ch >> (<!! ch)) >> >> >> This will non-deterministically output either >> => [:x' :x''] >> >> or >> >> => [:x' :y'] >> >> But again as I said, you can employ partition-all separately as a >> "collecting" mechanism before doing the (>!! ch [my-val-1 my-val-2]). >> Didn't write an example for that but let me know if that's not clear and >> I can put together a few lines. >> >> On Tuesday, October 10, 2017 at 7:50:20 AM UTC-7, Gary Trakhman wrote: >>> >>> So, at the point where you need 2 things to be consecutive, wrap them up >>> in a vector so they're one thing. `(partition-all 2)` will return a >>> transducer xform that chunks up your message stream by 2 >>> https://clojuredocs.org/clojure.core/partition-all, and if you need to >>> undo it you can do so with the `cat` transducer >>> https://clojuredocs.org/clojure.core/cat . >>> >>> On Tue, Oct 10, 2017 at 10:42 AM JokkeB <jahv...@gmail.com> wrote: >>> >>>> Thanks for the response. That's what I suspected. >>>> >>>> How does partition help me in this case? I can't see any way of using >>>> it. >>>> >>>> How about onto-chan, would that be deterministic? Or any other function? >>>> >>>> >>>> tiistai 10. lokakuuta 2017 17.33.22 UTC+3 Gary Trakhman kirjoitti: >>>> >>>>> I think a core assumption is that all writes can yield control at any >>>>> time to other worker go processes. I wouldn't rely on the consecutive >>>>> behavior even if it were true, nondeterminism is a good assumption with >>>>> core.async. If you need that particular guarantee, consider a call to >>>>> partition? >>>>> >>>>> On Tue, Oct 10, 2017 at 10:30 AM JokkeB <jahv...@gmail.com> wrote: >>>>> >>>> I'm wondering about a case when using async: >>>>>> >>>>>> I have a channel where I write from multiple threads. One of the >>>>>> sources is a go-loop with a timeout, so each second I write something to >>>>>> the channel. If I do two consecutive writes inside the go block, can >>>>>> another thread write between the two writes? Or can I rely on the two >>>>>> messages being consecutive in the channel? >>>>>> >>>>>> -- >>>>>> 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 >>>>>> --- >>>>>> 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/d/optout. >>>>>> >>>>> -- >>>> 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 >>>> --- >>>> 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/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. > -- 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.