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

Reply via email to