NEWS.md
daemons()
, server()
and dispatcher()
for providing a hook function to handle such objects.saisei(i = 1L)
is called.daemons()
status requests have been rendered more robust.saisei()
always returns NULL
if ‘tcp://’ URLs are being used as they do not support tokens.server()
and dispatcher()
argument ‘asyncdial’ is now FALSE by default, causing these functions to exit if a connection is not immediately available. This means that for distributed computing purposes, dameons()
should be called before server()
is launched on remote resources, or else server(asyncdial = TRUE)
allows servers to wait for a connection.launch_server()
now parses the passed URL for correctness before attempting to launch a server, producing an error if not valid.%>>%
gains the following enhancements:
.()
implemented to wrap a piped expression, ensuring return of either an ‘unresolvedExpr’ or ‘resolvedExpr’.unresolved()
in the same way as a ‘mirai’.mirai()
gains the following enhancements (thanks @HenrikBengtsson):
dispatcher()
gains the following arguments:
token
for appending a unique token to each URL the dispatcher listens at.lock
for locking sockets to prevent more than one server connecting at a unique URL.saisei()
implemented to regenerate the token used by a given dispatcher socket.launch_server()
replaces launch()
for launching local instances, with a simpler interface directly mapping to server()
.mirai()
with timeouts and no connection to a server.dispatcher()
re-implemented using an innovative non-polling design. Efficient process consumes zero processor usage when idle and features significantly higher throughput and lower latency.
launch()
exported as a utility for easily re-launching daemons that have timed out, for instance....
variables in the daemons()
call..compute
argument in daemons()
and mirai()
for sending tasks with heterogeneous compute requirements.
daemons()
interface has a new url
argument along with dispatcher
for using a background dispatcher process to ensure optimal FIFO task scheduling (now the default).
:0
will automatically assign a free ephemeral port, with the actual port number subsequently reported by daemons()
.daemons("view")
functionality.dispatcher()
is implemented as a new function for the dispatcher.server()
gains the following arguments:
asyncdial
to specify how the server dials into the client.maxtasks
for specifying a maximum number of tasks before exiting.idletime
for specifying an idle time, since completion of the last task before exiting.walltime
for specifying a soft walltime before exiting.timerstart
for specifying a minimum number of task completions before starting timers.daemons()
and server()
now error and return immediately instead of potentially causing a hang.eval_mirai()
is removed as an alias for mirai()
.--vanilla
argument to enable site / user profile and environment files to be read.call_mirai()
again (regression in 0.7.0), now returning a ‘miraiInterrupt’.is_mirai_interrupt()
to test if an object is a ‘miraiInterrupt’.daemons()
now takes ‘n’ and ‘.url’ arguments. ‘.url’ is an optional client URL allowing mirai tasks to be distributed across the network. Compatibility with existing interface is retained.server()
is exported for creating daemon / ephemeral processes on network resources.daemons()
and %>>%
deferred evaluation pipe.mirai()
gains a ‘.args’ argument for passing a list of objects already in the calling environment, allowing for example mirai(func(x, y, z), .args = list(x, y, z))
rather than having to specify mirai(func(x, y, z), x = x, y = y, z = z)
.is_mirai_error()
should be used in place of is_nul_byte()
, which is no longer re-exported.is_error_value()
can be used to test for all errors, including timeouts where the ‘.timeout’ argument has been used.%>>%
deferred evaluation pipe.mirai()
to ensure a mirai always resolves even if the child process crashes etc.is_mirai()
to test if an object is a mirai.$data
to optimally align with the underlying implementation.mirai()
added as an alias for eval_mirai()
; supports evaluating arbitrary length expressions wrapped in {}
.call_mirai()
. Access the $value
directly and an ‘unresolved’ logical NA will be returned if the async operation is yet to complete.stop_mirai()
added as a function to stop evaluation of an ongoing async operation.is_nul_byte()
and unresolved()
re-exported from {nanonext} to test for evaluation errors and resolution of a ‘mirai’ respectively.daemons()
interface to set and manage persistent background processes for receiving ‘mirai’ requests.