Hello, The point is that I do not use tcltk, it gets loaded probably as a dependency of a dependency of a package. When I unload it all work perfectly fine. I just found it because one of my computer did not have tk8.5 installed, and did not exhibit the mentioned bug. So I really think something should be done about this. Maybe the "gui loop" should not be run a the the loading of the tcltk package, but at the first function ran, or something like this.
As you can see in my example code, the in-memory database is opened in the parallel code... Best, Karl On Mon, Dec 31, 2012 at 10:58 PM, Simon Urbanek <simon.urba...@r-project.org> wrote: > > On Dec 31, 2012, at 1:08 PM, Karl Forner wrote: > >> Hello, >> >> I spent a lot of a time on a weird bug, and I just managed to narrow it down. >> > > First, tcltk and multicore don't mix well, see the warning in the > documentation (it mentions GUIs and AFAIR tcltk fires up a GUI event loop > even if you don't actually create GUI elements). Second, using any kind of > descriptors in parallel code is asking for trouble since those will be owned > by multiple processes. If you use databases files, etc. they must be opened > in the parallel code, they cannot be shared by multiple workers. The latter > is ok in your code so you're probably bitten by the former. > > Cheers, > Simon > > > >> In parallel code (here with parallel::mclappy, but I got it >> doMC/multicore too), if the library(tcltk) is loaded, R hangs when >> trying to open a DB connection. >> I got the same behaviour on two different computers, one dual-core, >> and one 2 xeon quad-core. >> >> Here's the code: >> >> library(parallel) >> library(RSQLite) >> library(tcltk) >> #unloadNamespace("tcltk") >> >> res <- mclapply(1:2, function(x) { >> db <- DBI::dbConnect("SQLite", ":memory:") >> }, mc.cores=2) >> print("Done") >> >> When I execute it (R --vanilla < test_parallel_db.R), it hangs >> forever, and I have to type several times CTRL+C to interrupt it. I >> then get this message: >> >> Warning messages: >> 1: In selectChildren(ac, 1) : error 'Interrupted system call' in select >> 2: In selectChildren(ac, 1) : error 'Interrupted system call' in select >> >> Then, just remove library(tcltk), or uncomment >> unloadNamespace("tcltk"), and it works fine again. >> >> I guess there's a bug somewhere, but where exactly ? >> >> Best, >> >> Karl Forner >> >> Further info: >> >> >> R version 2.15.1 (2012-06-22) -- "Roasted Marshmallows" >> Copyright (C) 2012 The R Foundation for Statistical Computing >> ISBN 3-900051-07-0 >> Platform: x86_64-unknown-linux-gnu (64-bit) >> >> ubuntu 12.04 and 12.10 >> >> ubuntu package tk8.5 >> >> ______________________________________________ >> R-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >> >> > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel