2008/1/18, Barry Rowlingson <[EMAIL PROTECTED]>: > richard mendes wrote: > > > The question i have is how does rpy handle multithreads. > > > > What i've seen till now is that a r object is created when importing > > the rpy library. how does this react to multithreads. > > Those are fairly vague questions, so I'll answer the specifics: > > > Is that r object connected to one R session ? > > Yes. > > > Is there a way to create a new r object ? > > You can try! Doing 'from rpy import r' just runs rpy.py, and that > defines a class 'R' and creates an object called 'r' of that class which > is then imported into the caller. So you can try and make another by > creating another instance: > > >>> import rpy > >>> r2=rpy.R() > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > File "C:\Python25\Lib\site-packages\rpy.py", line 286, in __init__ > _rpy.r_init(HAS_NUMERIC); > RuntimeError: Only one R object may be instantiated per session > > So I guess that's a no. That error is coming from the C code, so I > don't know how fundamental it is or how difficult it would be to make it > work...
The instantiation of several R objects within one python process is made impossible on purpose: R is not capable of multithreading (and lot of the C code running R is probably not reentrant - unpredictable things would happen). I suspect that the choice of generating an error, rather than having a singleton for that class for example, is to prevent accidental attempts at multithreading. What could be tried is to spawn several python process, that would be each importing the module "rpy". > > what happens to the r object if i just make a new object of the class > > that calls the rpy library. Would that create a new R session ? > > Fraid not: > > >>> from rpy import r > >>> r.assign('x',999) > 999 > >>> r.ls() > 'x' > >>> r2=r > >>> r2.ls() > 'x' > > it's the same session. > > > If someone knows the answers to these questions it would help me a > > lot, and save me some time writing tests to find this out. > > So I think that definitely within a single thread there can be only > one, and probably across multiple threads too. However if you use > os.fork() you can get a new R session... > > Barry > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > rpy-list mailing list > rpy-list@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/rpy-list > ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ rpy-list mailing list rpy-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rpy-list