Suspender la ejecución de un código de R durante un intervalo de tiempo
La función Sys.sleep
permite detener la ejecución de un proceso de R durante un intervalo de tiempo, en segundos. Esto es muy útil cuando se ejecuta un bucle for y se necesita ralentizar la velocidad del bucle.
Sintaxis y casos de uso
La función toma como entrada un número positivo que será el número de segundos para suspender la ejecución del código.
Sys.sleep(time)
Esta función tiene varios casos de uso. Algunos de ellos son:
- Cuando estás haciendo scraping de un sitio web o descargando archivos y no quieres sobrecargar el servidor.
- Para retrasar la ejecución de algún código.
- Cuando se quiere reintentar algún código que falló después de algún tiempo (por ejemplo, un servidor está caído y hay que esperar algún tiempo hasta que se levante).
- Cuando realizas llamadas a una API limitada (por ejemplo, si admite X llamadas por hora).
Usando Sys.sleep
dentro de un bucle
Considera el siguiente bucle for en el que para cada iteración imprimimos el tiempo que tarda en ejecutarse:
for(i in 1:5) {
# Hora de inicio
inicio <- Sys.time()
# Código
# Hora de fin
fin <- Sys.time()
# Tiempo transcurrido
tiempo <- fin - inicio
print(tiempo)
}
Time difference of 2.861023e-06 secs
Time difference of 1.907349e-06 secs
Time difference of 1.907349e-06 secs
Time difference of 3.099442e-06 secs
Time difference of 9.536743e-07 secs
Cada iteración no tarda casi nada en completarse. Sin embargo, si quieres detener la ejecución un segundo cada iteración puedes utilizar Sys.sleep(1)
.
for(i in 1:5) {
# Hora de inicio
inicio <- Sys.time()
Sys.sleep(1)
# Hora de fin
fin <- Sys.time()
# Tiempo transcurrido
tiempo <- fin - inicio
print(tiempo)
}
Time difference of 1.003335 secs
Time difference of 1.012604 secs
Time difference of 1.014571 secs
Time difference of 1.028076 secs
Time difference of 1.027852 secs
Ahora cada iteración tarda alrededor de 1 segundo más en completarse.
Usando Sys.sleep
dentro de un sapply
También puedes utilizar la función Sys.sleep
dentro de una función sapply o lapply. En el siguiente ejemplo estamos pausando la ejecución 5 segundos entre iteraciones.
sapply(1:5, function(i) {
Sys.sleep(5)
return(i)
})
1 2 3 4 5