如何设置python(rpy2)执行的R代码的时间限制?

时间:2012-03-05 16:44:09

标签: python r timeout rpy2

我想在2秒后停止执行从python(rpy2)调用的R函数。这是python代码:

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秒才能获得信号处理程序

2 个答案:

答案 0 :(得分:1)

R代码的评估不会发布Python GIL。获取Python脚本来监视R代码执行时间的唯一方法是拥有两个进程。

您可以检查rpy2“testInterruptR()”的单元测试,尽管在应用程序中有更多优雅的方法可以实现它。有一个SIGINT被发送到运行无限循环的R进程。

答案 1 :(得分:1)

尝试设置警报,然后将想要超时的操作放在try catch块内。警报应该抛出一个可捕获的异常。希望这很有道理,无论如何它对我有用。