Johan,

Thanks for your suggestion -- that worked well!  This is purely an academic 
question at this point, but is there some way to (essentially) implement a 
resource pool using a flow like:

Source(Seq(resource1, resource2, resource3)).map(resource => computeWith(
resource)) //<== at this point split stream, sending a resource "back 
around" to Source, and sending something else to an output Sink?

For the above to work, my Source would have to block when it doesn't have 
any resources to dispense.

I suspect that my question seems crazy to a seasoned streams user, but I'd 
figured I'd ask.  Basically the motivating use case is:

I have a lot of cases in which I have a fairly involved workflow with 
branching logic that must check out resources at the beginning and return 
them in the end.  It would be nice to represent the logic of those 
workflows purely using streams.  If every block that uses a resource pool 
has to be enclosed in it's own future, that logic becomes opaque, or at the 
very least shifted to a different level than the overall streams logic.  (I 
can't do for example:  Source(resources).zip(Source(workItems)).map((r,i) 
=> computation1(r,i)).buffer(...).map((r,i) => computation2(r,i)).bcast 
(etc,etc)). 

-John





On Wednesday, April 6, 2016 at 4:50:57 AM UTC-7, Akka Team wrote:
>
> Hi John,
>
> You could hide step 2-4 behind a method returning a future, that way you 
> can run the blocking operations on a separate threadpool.
>
> Pseudocode:
> def doWorkWithResource(item: WorkItem): Future[ComputationResult] = {
>   Future {
>     // acquire resource
>     // do work 
>     // return resource to pool
>   }(aSpecialExecutionContextForBlocking)
>
>
> Source(largeButFiniteQueue).mapAsync(parallellism)(doWorkWithResource).to(Sink(someKindOfOutput))
>
>
> The parallellism mapAsync parameter should then probably be the same as 
> the number of threads in the blocking threadpool as no more functions can 
> run in parallell anyway.
>
> --
> Johan Andrén
> Akka Team, Lightbend Inc.
>

-- 
>>>>>>>>>>      Read the docs: http://akka.io/docs/
>>>>>>>>>>      Check the FAQ: 
>>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html
>>>>>>>>>>      Search the archives: https://groups.google.com/group/akka-user
--- 
You received this message because you are subscribed to the Google Groups "Akka 
User List" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.

Reply via email to