我想setTimeLimit()在R中掌握并且我的经验导致了几个相关的问题,所以也许根本问题是:这是如何真正起作用的?(我一直在寻找evalWithTimeout()的R.utils,以及,它可能适合我的目的稍微好一点,但它是建立在此功能).
以下是我想弄清楚的关键事项:
它如何监控经过的时间?即它似乎插入流控制,所以它是如何做到的?能够拥有"后台"流程很酷,可用于报告状态,检查点等.
我可以确定触发前剩余的时间吗?我意识到我可以将它包装起来并在某处保存在调用点(即输出proc.time())附近消耗的已用时间和CPU时间.但是,这个功能已经在某处存储了这些功能,我想知道在哪里,或者至少知道如何确定剩余的时间.
如果R控制台空闲,是否可以做一些有用的事情?能够监控elapsed.time()并且cpu.time()非常有用.我希望能够监视R何时处于空闲状态,但似乎需要修改它需要提交或完成命令.而且,仅输出错误不会触发后续操作.(也许我需要更多关注evalWithTimeout.)
帮助信息表明它可以适用于C或Fortran,但不提供示例.有关如何做到这一点的任何建议?
我意识到了
dbGetQuery comes with a default implementation that calls dbSendQuery, then dbFetch, ensuring that the result is always freed by dbClearResult.
和
dbClearResult frees all resources (local and remote) associated with a result set. In some cases (e.g., very large result sets) this can be a critical step to avoid exhausting resources (memory, file descriptors, etc.)
但我的团队刚刚经历了一个锁定的表,我们进入了MySQL kill pid,我想知道 - 有没有办法超时使用该DBI包提交的查询?
我正在寻找,找不到相应的
dbGetQuery(conn = connection, 'select stuff from that_table', timeout = 90)
我尝试了这个,并使用和不使用参数集来分析函数,它似乎没有做任何事情; 为什么会这样,如果dbClearResult总是在玩?
我有一个脚本使用rNOMADS包下载预测数据.目前,它使用for循环按顺序调用每三小时预测间隔的预测下载功能.问题是下载功能偶尔会随机"冻结",迫使我终止R并开始进程.当它冻结时,代码会在下载功能中挂起几分钟,而不是执行所需的典型<1秒,然后当我尝试暂停执行时,我收到一条消息,说"R没有响应您的中断处理请求,所以停止你可能需要完全终止R的当前操作."
有没有办法为每个for循环迭代中的特定代码块设置时间限制,然后跳过该代码块并在达到时间限制时抛出错误?像tryCatch这样的东西,我可以用它来引发一个标志来重新做循环迭代吗?
就像是:
for (i in 1:N) {
...
setTimeLimit(XXX seconds) {
downloadFunction()
} timeLimitReached {
doOverFlag <- 1
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我正在尝试让一个函数运行指定的时间,目前我正在尝试使用该system.time函数。我不知道如何定义一个新变量来获取函数运行的累积值,然后将其放入 while 循环中。
timer<-(system.time(simulated_results<-replicate(n=1,simulation(J,10000,FALSE,0.1),simplify="vector"))[3])
print(timer)
while(cumsum(timer)<15){
print(cumsum(timer))
simulated_results<-replicate(n=10000,simulation(J,10000,FALSE,0.1),simplify="vector")
}
Run Code Online (Sandbox Code Playgroud)
我将非常感谢任何帮助!