parabar-package | R Documentation |
A simple interface in the form of R6 classes for executing tasks in parallel, tracking their progress, and displaying accurate progress bars.
The package is aimed at two audiences: (1) end-users who want to execute a
task in parallel in an interactive R
session and track the execution
progress, and (2) R
package developers who want to use parabar
as a solution for parallel processing in their packages.
For the first category of users, parabar
provides several main
functions of interest:
start_backend()
: creates a parallel backend for executing tasks
according to the specifications provided.
stop_backend()
: stops an active backend and makes the R6::R6
eligible for garbage collection.
par_sapply()
: is a drop-in replacement for the built-in
base::sapply()
function when no backend is provided. However, when a
backend is provided, the function will execute a task in parallel on the
backend, similar to the built-in function parallel::parSapply()
.
par_lapply()
: is a drop-in replacement for the built-in
base::lapply()
function when no backend is provided. However, when a
backend is provided, the function will execute a task in parallel on the
backend, similar to the built-in function parallel::parLapply()
.
par_apply()
: is a drop-in replacement for the built-in
base::apply()
function when no backend is provided. However, when a
backend is provided, the function will execute a task in parallel on the
backend, similar to the built-in function parallel::parApply()
.
clear()
: removes all variables available on a backend.
peek()
: returns the names of all variables available on a
backend.
export()
: exports objects from a specified environment to a
backend.
evaluate()
: evaluates arbitrary and unquoted expression on a
backend.
parabar
also provides a function configure_bar()
for
configuring the progress bar, and three functions can be used to get and set
the package options:
get_option()
: gets the value of a package option.
set_option()
: sets the value of a package option.
set_default_options()
: sets default values for all package
options. This function is automatically called on package load.
For the second category of users, parabar
provides a set of
classes (i.e., R6::R6Class()
) that can be used to create backends (i.e.,
synchronous and asynchronous) and interact with them via a simple interface.
From a high-level perspective, the package consists of backends
and
contexts
in which these backends are employed for executing the tasks
in parallel.
A backend
represents a set of operations, defined by the
BackendService
interface, that can be deployed on a cluster
returned by parallel::makeCluster()
. Backends can be synchronous (i.e.,
SyncBackend
) or asynchronous (i.e., AsyncBackend
).
The former will block the execution of the current R
session until the
parallel task is completed, while the latter will return immediately and the
task will be executed in a background R
session.
The BackendService
interface defines the following operations:
start()
, stop()
,
clear()
, peek()
,
export()
,
evaluate()
,
sapply()
, lapply()
,
apply()
, and
get_output()
.
Check out the documentation for BackendService
for more
information on each method.
A context
represents the specific conditions in which the backend
operates. The default, regular Context
class simply forwards the
call to the corresponding backend method. However, a more complex context can
augment the operation before forwarding the call to the backend. One example
of a complex context is the ProgressTrackingContext
class. This
class extends the regular Context
class and decorates, for
example, the backend sapply()
operation to log
the progress after each task execution and display a progress bar.
The following are the main classes provided by parabar
:
BackendService
: interface for backend operations.
Backend
: abstract class that serves as a base class for all
concrete implementations.
SyncBackend
: synchronous backend extending the abstract
Backend
class.
AsyncBackend
: asynchronous backend extending the abstract
Backend
class.
Specification
: backend specification used when starting a
backend.
TaskState
: determine the state of a task deployed to an
asynchronous backend.
BackendFactory
: factory for creating backend objects.
Context
: default context for executing backend operations.
ProgressTrackingContext
: context for decorating the
sapply()
,
lapply()
, and
apply()
operations to track and display the
execution progress.
ContextFactory
: factory for creating context objects.
UserApiConsumer
: opinionated wrapper around the other
R6::R6
classes used in by the exported functions for the users.
parabar
also exposes several classes for creating and updating
different progress bars, namely:
Bar
: abstract class defining the pure virtual methods to be
implemented by concrete bar classes.
BasicBar
: a simple, but robust, bar created via
utils::txtProgressBar()
extending the Bar
abstract class.
ModernBar
: a modern bar created via progress::progress_bar
extending the Bar
abstract class.
BarFactory
: factory for creating bar objects.
Finally, parabar
uses several base::options()
to configure the
behavior of the functionality it provides. For more information on the
options used and their see default values, see the Options
class.
For more information about the design of parabar
, check out the
documentation and the UML
diagram at
parabar.mihaiconstantin.com.
Software Design
Maintainer: Mihai Constantin mihai@mihaiconstantin.com (ORCID)
Useful links:
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.