From ripley at stats.ox.ac.uk  Sun Jun 21 18:59:30 2015
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Sun, 21 Jun 2015 17:59:30 +0100
Subject: [Rd] Listing all spawned jobs/processed after
 parallel::mcparallel()?
In-Reply-To: <CAFDcVCR0KBxf8YTct-=WvnLssnUBAOj4pV2U40p8Z2mtS=ktOA@mail.gmail.com>
References: <CAFDcVCR0KBxf8YTct-=WvnLssnUBAOj4pV2U40p8Z2mtS=ktOA@mail.gmail.com>
Message-ID: <5586ED72.3090902@stats.ox.ac.uk>

On 20/06/2015 22:21, Henrik Bengtsson wrote:
> QUESTION:
> Is it possible to query number of active jobs running after launching
> them with parallel::mcparallel()?
>
> For example, if I launch 3 jobs using:
>
>> library(parallel)
>> f <- lapply(1:3, FUN=mcparallel)
>
> then I can inspect them as:
>
>> str(f)
> List of 3
>   $ :List of 2
>    ..$ pid: int 142225
>    ..$ fd : int [1:2] 8 13
>    ..- attr(*, "class")= chr [1:3] "parallelJob" "childProcess" "process"
>   $ :List of 2
>    ..$ pid: int 142226
>    ..$ fd : int [1:2] 10 15
>    ..- attr(*, "class")= chr [1:3] "parallelJob" "childProcess" "process"
>   $ :List of 2
>    ..$ pid: int 142227
>    ..$ fd : int [1:2] 12 17
>    ..- attr(*, "class")= chr [1:3] "parallelJob" "childProcess" "process"
>
> However, if I launch them without "recording" them, or equivalently if I do:
>
>> f <- lapply(1:3, FUN=mcparallel)
>> rm(list="f")
>
> is there a function/mechanism in R/the parallel package allowing me to
> find the currently active/running processes?  ... or at least query
> how many they are?  I'd like to use this to prevent spawning of more
> than a maximum number of parallel processes.  (Yes, I'm away of
> mclapply() and friends, but I'm looking at using more low-level
> mcparallel()/mccollect()). I'm trying to decide whether I should
> implement my own mechanism for keeping track of "jobs" or not.

Note that 'currently active/running' is a slippery concept and is not 
what the results above show.  But see ?children, which seems to be what 
you are looking for.  It is not exported and there is no more detailed 
explanation save the source code.  Also note that tells you about 
children and not grandchildren ....

You can find out about child processes (and their children) at OS level, 
for example via the 'ps' command, but doing so portably is not easy.

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Emeritus Professor of Applied Statistics, University of Oxford
1 South Parks Road, Oxford OX1 3TG, UK



[Rd] Listing all spawned jobs/processed after parallel::mcparallel()?
Prof Brian Ripley