You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

tar_make()遇深层嵌套函数错误时无限停滞问题求助

排查targets包tar_make()无限挂起的可能原因

结合你提供的信息,以下是几种可能导致tar_make()/tar_make_future()挂起的原因:

  • 错误捕获逻辑冲突:targets通过error = "null"和workspace_on_error = TRUE设置了错误处理规则,但深层包函数的错误抛出可能使用了非标准逻辑(比如自定义条件类、嵌套的withCallingHandlers),导致targets无法正确捕获并处理错误,进而阻塞流程。顶层函数直接调用stop()时,错误符合标准R错误格式,能被targets正常处理。

  • 隔离环境下的资源未释放:targets在独立环境中运行目标,而深层包函数可能持有未关闭的资源(如文件连接、临时对象锁)。当错误发生时,这些资源无法被自动清理,导致targets在尝试保存工作空间或终止进程时陷入等待。交互式运行时,会话级的资源管理能自动处理这类问题。

  • 动态分支的错误通信阻塞:你的results目标使用了动态分支,当某个分支的深层函数抛出错误时,分支进程与主进程的通信可能被中断。如果错误导致分支进程无法向主进程发送终止信号,主进程会一直等待该分支完成,最终整个流程挂起。

  • workspace_on_error的保存阻塞:启用workspace_on_error = TRUE后,targets需要在错误发生时保存整个工作空间。深层函数的错误可能导致某些对象无法被序列化(比如包含活跃连接的对象),序列化过程陷入无限循环,进而导致整个进程挂起。


你的配置文件代码:

# _targts.R
# all workflow functions are in package:wp.batch
# package wp.batch imports package wp.analysis


library(targets)
library(wp.batch)
library(future)
targets::tar_option_set(packages = "wp.batch", error = "null", 
    workspace_on_error = TRUE)
plan("sequential")
alts = c("first", "second")
list(tar_target(config_file, "test_debug.xlsx", format = "file"), 
    tar_target(config, read_batch_config(config_file, alts)), 
    tar_target(data, data_workflow(config), pattern = map(config)), 
    tar_target(results, analysis_workflow(data), pattern = map(data)), 
    tar_target(plots, plot_workflow(results), pattern = map(results), 
        deployment = "main"))

交互式运行的错误回溯:

# backtrace when running `analysis_workflow(data)` interactively
Backtrace:
     ▆
  1. ├─wp.batch::analysis_workflow(data)
  2. │ ├─dplyr::mutate(...)
  3. │ └─dplyr:::mutate.data.frame(...)
  4. │   └─dplyr:::mutate_cols(.data, dplyr_quosures(...), by)
  5. │     ├─base::withCallingHandlers(...)
  6. │     └─dplyr:::mutate_col(dots[[i]], data, mask, new_columns)
  7. │       └─mask$eval_all_mutate(quo)
  8. │         └─dplyr (local) eval()
  9. └─purrr::map2(.data$data, .data$analysisInputs, analysis_factory)
 10.   └─purrr:::map2_("list", .x, .y, .f, ..., .progress = .progress)
 11.     ├─purrr:::with_indexed_errors(...)
 12.     │ └─base::withCallingHandlers(...)
 13.     ├─purrr:::call_with_cleanup(...)
 14.     └─wp.batch (local) .f(.x[[i]], .y[[i]], ...)
 15.       ├─base::do.call(summary_analysis, c(data, unlist(inputs, recursive = FALSE)))    
 16.       └─wp.analysis (local) `<fn>`(df = `<tibble[,8]>`, metrics = NA_character_, type = "metric by duration")
 17.         └─wp.analysis:::analysis_duration(...)
 18.           └─base::stop("analysis_duration() not implemented")

内容的提问来源于stack exchange,提问作者mikeck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:57:03