1

Python(rpy2)から呼び出されたR関数の実行を2秒後に停止したい。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秒待つ必要があります。

4

2 に答える 2

1

Rコードの評価では、PythonGILはリリースされません。Rコードの実行時間を監視するPythonスクリプトを取得する唯一の方法は、2つのプロセスを持つことです。

rpy2 "testInterruptR()"の単体テストを確認できますが、アプリケーションにそれを実装するためのより洗練された方法があります。そこで、SIGINTが無限ループを実行しているRプロセスに送信されます。

于 2012-03-06T07:03:18.363 に答える
1

アラームを設定してから、タイムアウトする操作をtrycatchブロック内に配置してみてください。アラームはキャッチ可能な例外をスローする必要があります。それが理にかなっていることを願っています、とにかくそれは私のために働きます。

于 2012-05-20T21:40:45.830 に答える