2015-12-18 17 views
3

我有一個由時間序列組成的數據幀。使用芹菜在pyRserve中的並行編程

日期首頁|時間序列1 |時間序列2 | ......等等

我已經使用pyRserve運行使用R.

我想用芹菜實現並行處理的預測功能。 我已經在以下上下文中編寫了工作代碼。

def pipeR(k #input variable): 
    conn = pyRserve.connect(host = 'localhost', port = 6311) 
    # OPENING THE CONNECTION TO R 

    conn.r.i = k 
    # ASSIGNING THE PYTHON VARIABLE TO THAT OF IN THE R ENVIRONMENT 

    conn.voideval\(''' 
    WKR_Func <- forecst(a) 
    { 
    ...# FORECASTS THE TIMESERIES IN COLUMN a OF THE DATAFRAME 
    } 
    ''') 

    conn.eval('forecst(i)') 
    # CALLING THE FUNCTION IN R 

group(pipeR.s(k) for k in [...list of column headers...])() 

爲了實現並行處理,我可以有對所有的工作進程的單一端口(如我在上面的代碼那樣,端口:6311)或我應該有不同的工作進程的不同端口??

我目前得到一個錯誤

錯誤SocketConnection處( 「本地主機」,端口=端口,服務器= TRUE,阻斷= TRUE,:無法打開R中的連接

+0

執行命令'conn = pyRserve.connect(host ='localhost',port = 6311)'從ipython? – scytale

+0

是的,它應該....只要你有R和Rserve軟件包安裝在它... –

回答

1

當我打開不同的端口爲每個工作進程的問題得到了解決......

def pipeR(k, Frequency, Horizon, Split, wd_path): 
    # GENERATING A RANDOM PORT 
    port = randint(1000,9999) 

    # OPENING THE PORT IN THE R ENVIRONMENT 
    conn0 = pyRserve.connect(host = 'localhost', port = 6311) 
    conn0.r.port = port 
    conn0.voidEval\ 
    (''' 
     library(Rserve) 
     Rserve(port = port, args = '--no-save') 
    ''') 

    # OPENING THE PORT IN THE PYTHON ENVIRONMENT 
    conn = pyRserve.connect(host = 'localhost', port = port) 

    # ASSIGNING THE PYTHON VARIABLE TO THAT OF IN THE R ENVIRONMENT 
    conn.r.i = k 

    conn.voideval\ 
    (''' 
    WKR_Func <- forecst(a) 
    { 
    ...# FORECASTS THE TIMESERIES IN COLUMN a OF THE DATAFRAME 
    } 
    ''') 

    conn.eval/('forecst(i)') 
    conn0.close() 
+0

我在這裏看你的答案,並計劃做類似的事情;是否如果你有'conn0'的多個連接,它們在R中共享相同的狀態?我在[Rserve文檔](http://www.rforge.net/Rserve/)上看到「每個連接都有獨立的工作空間和工作目錄。」? – shapiromatron

+0

我這麼認爲。文檔說,除非明確同步,否則每個線程都應該有自己的連接對象。因此,我嘗試了上述方法。 –

+0

我剛查過;不要以爲這是真的。在這裏我運行1個Rserve實例,並且在python中有兩個連接;狀態不共享https://gist.github.com/shapiromatron/80a2547a599441332c736ff5d836097b – shapiromatron