github.com/tmobile/parallelizer (go): Package parallelizer is a library for enabling the addition of controlled parallelization utilizing a pool of worker goroutines in a simple manner.  This is not intended as an external job queue, where outside programs may submit jobs, although it could easily be used to implement such a tool.  The parallelizer package provides a Runner interface, which is for client applications to implement.  Instances of the Runner interface may then be passed to the constructor functions NewSynchronousWorker or NewGoWorker, which construct objects conforming to the Worker interface.  Data items may then be passed to the Worker instances via the Worker.Call method, and the processing completed and the final result obtained by calling Worker.Wait.  A Runner implementation must provide a Runner.Run method, which will actually process the data in a goroutine and return a result; the result is then passed to the Runner.Integrate method, which is run synchronously with other Runner.Integrate calls, and which can submit additional data items for processing.  Once all data is processed, and the client code has called Worker.Wait, the Worker will call the Runner.Result method to obtain the result.  The Runner.Result method will be called exactly once; the returned value is cached in the Worker to be returned by future calls to Worker.Wait.  The Worker.Call method may not be called again after Worker.Wait has been called.  The parallelizer package also provides a Doer interface, which is for client applications to implement.  Instances of the Doer interface may then be passed to the constructor function NewSerializer, which constructs objects conforming to the Serializer interface.  Data items may then be passed to the Serializer objects to be executed via Doer.Do in a synchronous manner without necessarily blocking the calling goroutine.  A Doer implementation must provide a Doer.Do method, which will actually process the data in a separate goroutine; each call will be executed synchronously, so thread-safety in Doer.Do is not a concern.  When the code using the wrapping Serializer is done, it will call Serializer.Wait, which will call the Doer.Finish method and return its result to the caller.  Note that none of the Serializer.Call methods may be called again after calling Serializer.Wait.
Keywords: go|golang|golang-library