2012-03-05 44 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块的内部。警报应该引发可捕获的异常。希望这是有道理的,它对我来说无论如何都适用。

相关问题