我想在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秒才能获得信号处理程序。
答案 0 :(得分:1)
R代码的评估不会发布Python GIL。获取Python脚本来监视R代码执行时间的唯一方法是拥有两个进程。
您可以检查rpy2“testInterruptR()”的单元测试,尽管在应用程序中有更多优雅的方法可以实现它。有一个SIGINT被发送到运行无限循环的R进程。
答案 1 :(得分:1)
尝试设置警报,然后将想要超时的操作放在try catch块内。警报应该抛出一个可捕获的异常。希望这很有道理,无论如何它对我有用。