Как я могу установить ограничение по времени для кода R, выполняемого с помощью Python (rpy2)? - PullRequest
1 голос
/ 05 марта 2012

Я хочу прекратить выполнение функции R, вызываемой из python (rpy2), через 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 секунд для сигнала обработчик .

Ответы [ 2 ]

1 голос
/ 21 мая 2012

Попробуйте установить будильник, а затем установить желаемое время ожидания внутри блоков try catch. Тревога должна бросить ловимое исключение. Надеюсь, это имеет смысл, это все равно работает для меня.

1 голос
/ 06 марта 2012

Оценка кода R не освобождает Python GIL. Единственный способ получить скрипт Python для контроля времени выполнения кода R - это два процесса.

Вы можете проверить модульный тест для rpy2 "testInterruptR ()", хотя есть гораздо более элегантные способы реализовать это в приложении. Там SIGINT отправляется процессу R, выполняющему бесконечный цикл.

...