[Rd] Speed-up/Cache loadNamespace()
Simon Urbanek
@|mon@urb@nek @end|ng |rom R-project@org
Sun Jul 19 22:07:42 CEST 2020
Mario,
On unix if you use Rseve you can pre-load all packages in the server (via eval config directive or by running Rserve::run.Rserve() from a session that has everything loaded) and all client connections will have the packages already loaded and available* immediately. You could replace Rscript call with a very tiny Rserve client program which just calls source(""). I can give you more details if you're interested.
Cheers,
Simon
* - there are some packages that are inherently incompatible with fork() - e.g. you cannot fork Java JVM or open connections.
> On Jul 20, 2020, at 6:47 AM, Mario Annau <mario.annau using gmail.com> wrote:
>
> Thanks for the quick responses. As you both suggested storing the packages
> to local drive is feasible but comes with a size restriction I wanted to
> avoid. I'll keep this in mind as plan B.
> @Hugh: 2. would impose even greater slowdowns and 4. is just not feasible.
> However, 3. sounds interesting - how would this work in a Linux environment?
>
> Thank you,
> Mario
>
>
> Am So., 19. Juli 2020 um 20:11 Uhr schrieb Hugh Parsonage <
> hugh.parsonage using gmail.com>:
>
>> My advice would be to avoid the network in one of the following ways
>>
>> 1. Store installed packages on your local drive
>> 2. Copy the installed packages to a tempdir on your local drive each time
>> the script is executed
>> 3. Keep an R session running in perpetuity and source the scripts within
>> that everlasting session
>> 4. Rewrite your scripts to use base R only.
>>
>> I suspect this solution list is exhaustive.
>>
>> On Mon, 20 Jul 2020 at 1:50 am, Mario Annau <mario.annau using gmail.com> wrote:
>>
>>> Dear all,
>>>
>>> in our current setting we have our packages stored on a (rather slow)
>>> network drive and need to invoke short R scripts (using RScript) in a
>>> timely manner. Most of the script's runtime is spent with package loading
>>> using library() (or loadNamespace to be precise).
>>>
>>> Is there a way to cache the package namespaces as listed in
>>> loadedNamespaces() and load them into memory before the script is
>>> executed?
>>>
>>> My first simplistic attempt was to serialize the environment output
>>> from loadNamespace() to a file and load it before the script is started.
>>> However, loading the object automatically also loads all the referenced
>>> namespaces (from the slow network share) which is undesirable for this use
>>> case.
>>>
>>> Cheers,
>>> Mario
>>>
>>> [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> R-devel using r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>
>>
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
More information about the R-devel
mailing list