Остановить выполнение представленных строк кода - PullRequest
2 голосов
/ 13 января 2020

Я запускаю длинный R-скрипт, который занимает 2 или 3 дня до конца sh. Я случайно запустил другой скрипт, который, если он работает как обычно R, будет go в некоторой очереди, и R запустит его, как только закончится первый скрипт. Мне нужно это остановить, так как это поставит под угрозу результаты первого сценария. Есть ли видимая очередь или какой-либо другой способ не дать R запустить какой-то код?

Я работаю над интерактивным сеансом в R studio, на windows 10.

Большое спасибо за любую помощь!

Ответы [ 2 ]

4 голосов
/ 13 января 2020

Предполагая, что вы работаете в консоли (или в интерактивном сеансе в R studio, это не определено в вашем вопросе) и что вы выполняли поиск сценария / вставки кода и в то время, когда он выполнял вставку другого фрагмента кода:

То, что продолжается, - это то, что вы поместили данные во входной поток процесса R, это буферизованный ввод, поэтому он будет запускать каждую строку после завершения вызова предыдущей строки и освобождать процесс.

Нет простого способа играть с буфером ввода, это внутренняя система ввода / вывода R, и в основном это операционная система, которая пока хранит эту информацию в кэше.

Запрос самого R невозможен, так как у него уже есть этот буфер для чтения, любая новая команда будет go после.

Последний шанс : Если вы можете обнаружить другой кусок кода, начинающийся в вашей консоли, вы можете попробовать нажать es c, чтобы остановить выполнение кода.

Вы можете попробовать связываться с буферами процесса с помощью procxp , но не в любом случае, у вас есть все шансы просто сделать segfault для R-сессии.

Чтобы избежать этого в будущем, используйте сценарии и запускайте их в командной строке отдельно с помощью Rscript (присутствует в каталоге R bin под windows тоже, несмотря на ссылку, указывающую на справочную страницу linux).
Это создаст один сеанс на сценарий и позволит уничтожить их независимо. Тем не менее, если они оба пишут в одно и то же место (база данных, файл создаст ошибку при обращении к двум процессам), что не предотвратит повреждение данных.

2 голосов
/ 13 января 2020

Я предполагаю, что у OP есть проблема ниже:

# my big code, running for a long time
Sys.sleep(10); print("hello 1")

# other big code I dropped in console while R was still busy with above code
print("hello 2")

Если это так, я не думаю, что возможно остановить запуск второго процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...