2012-03-05 180 views
1

我想在2秒後停止執行從python(rpy2)調用的R函數。這是python代碼:如何設置由python(rpy2)執行的R代碼的時間限制?

signal.signal(signal.SIGALRM, handler) 
signal.alarm(2) # set timeout to 2 seconds 

# run R code 
result = robjects.r(''' 
     Sys.sleep(10) 
     return("hello") 
    ''') 

signal.alarm(0) # disable alarm 

它不起作用。我必須等待10秒,信號處理程序

+0

它可以幫助人們確切知道_how_是行不通的。錯誤?只是忽略請求暫停10秒? – joran 2012-03-05 17:00:16

+0

僅僅忽略了暫停10秒的請求。 Python對R代碼執行時間一無所知,當我通過robbers執行它5次時 - 信號在第一次出現後出現,稱爲_handler_方法,但是在10秒後,不是2.我希望在2秒後終止R代碼處理。 – user1250280 2012-03-05 17:16:08

回答

1

R代碼的評估不會釋放Python GIL。獲得Python腳本來監視R代碼的執行時間的唯一方法是擁有兩個進程。

您可以檢查rpy2「testInterruptR()」的單元測試,雖然在應用程序中有更多更好的方法來實現它。有一個SIGINT被髮送到運行無限循環的R進程。

+0

謝謝(我不能點擊「投票」)。 – user1250280 2012-03-06 08:23:25

1

試着設置你的鬧鐘,然後把你想要超時的操作放在try catch塊的內部。警報應該引發可捕獲的異常。希望這是有道理的,它對我來說無論如何都適用。