在foreach循环内没有收到标准输出[重复]

Posted

技术标签:

【中文标题】在foreach循环内没有收到标准输出[重复]【英文标题】:No standard output received inside foreach loop [duplicate] 【发布时间】:2017-12-17 16:00:42 【问题描述】:

我正在使用doParallelforeach 进行相当长的并行处理。与我看到的大多数示例不同,将计算密集型但输入轻的代码输入循环,我使用foreach 来协调多个大型独立数据集的同时处理。所以在循环内部,我使用元数据从磁盘读取文件,对其进行操作,然后写回。

在我将此操作转换为 foreach 循环之前,我正在使用 messages() 写出调试消息。但是,由于我已切换到使用foreach%dopar%,我注意到循环“变暗”:它正在做它应该做的事情,但我没有收到任何输出。 (我应该提到,这个循环被写入了一个脚本,我用Rscript从shell调用。)

我猜这与doParallel 分拆其他线程的事实有关——也许这些线程不再知道将标准输出转储到哪里?想法?

【问题讨论】:

我不是并行计算的天才,但 R 中的套接字类型集群在工作完成并返回输出。我从来没有使用过叉型集群,所以我不知道这是否会绕过这个限制。过去几次我都迫切需要一个进度条,当并行进程的数量很少时,有一种解决方法:为每个作业编写单独的、非并行化的代码,然后手动运行每个作业R 的单独(同时)实例。 @JacobSocolar Oof,那 is 绝望了 ;) 我通过 PBS 非反应地运行了这个,发现我的日志有来自 shell 的错误和警告消息(其中的一部分)处理涉及使用system() 调用其他工具)但不是@ 987654330@ R 中的输出。所以看起来可能有它。我想另一个绝望的答案是 `system("echo My update")... 【参考方案1】:

如果您想从并行foreach 循环中输出,只需使用选项outfilemakeCluster(no_cores, outfile = "")

【讨论】:

跑步回来后会进行测试,但这听起来正是我所需要的 :)

以上是关于在foreach循环内没有收到标准输出[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在foreach循环中输出逗号分隔值[重复]

取消设置循环内对象的当前属性[重复]

在每个 foreach 循环迭代中包含重复的刀片模板

执行异步forEach循环后重新定义全局变量[重复]

foreach 循环内的 while 循环仅返回 1 行

假如数组接收到一个null,那么应该怎么循环输出。百度结果,都需要提前判断。否则出现空指针异常。。我还是想在数组中实现保存和输出null。