R itself is neither multithreaded, nor thread safe. If you want to interact with more than one R session, you'll have to have a separate process for each R session. I built the RSOAP tool, which includes wrapper (called something like) LocalRSOAPConnection that wraps the separate session so that it looks almost like a plain Rpy object.
http://sourceforge.net/projects/rsoap/ and http://rsoap.sourceforge.net -G On Jan 18, 2008, at 4:22AM , Barry Rowlingson wrote: > 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... > >> 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