在foreach循环内没有收到标准输出[重复]
Posted
技术标签:
【中文标题】在foreach循环内没有收到标准输出[重复]【英文标题】:No standard output received inside foreach loop [duplicate] 【发布时间】:2017-12-17 16:00:42 【问题描述】:我正在使用doParallel
与foreach
进行相当长的并行处理。与我看到的大多数示例不同,将计算密集型但输入轻的代码输入循环,我使用foreach
来协调多个大型独立数据集的同时处理。所以在循环内部,我使用元数据从磁盘读取文件,对其进行操作,然后写回。
在我将此操作转换为 foreach 循环之前,我正在使用 messages()
写出调试消息。但是,由于我已切换到使用foreach
和%dopar%
,我注意到循环“变暗”:它正在做它应该做的事情,但我没有收到任何输出。 (我应该提到,这个循环被写入了一个脚本,我用Rscript
从shell调用。)
我猜这与doParallel
分拆其他线程的事实有关——也许这些线程不再知道将标准输出转储到哪里?想法?
【问题讨论】:
我不是并行计算的天才,但 R 中的套接字类型集群在工作完成并返回输出。我从来没有使用过叉型集群,所以我不知道这是否会绕过这个限制。过去几次我都迫切需要一个进度条,当并行进程的数量很少时,有一种解决方法:为每个作业编写单独的、非并行化的代码,然后手动运行每个作业R 的单独(同时)实例。 @JacobSocolar Oof,那 is 绝望了 ;) 我通过 PBS 非反应地运行了这个,发现我的日志有来自 shell 的错误和警告消息(其中的一部分)处理涉及使用system()
调用其他工具)但不是@ 987654330@ R 中的输出。所以看起来可能有它。我想另一个绝望的答案是 `system("echo My update")...
【参考方案1】:
如果您想从并行foreach 循环中输出,只需使用选项outfile
:makeCluster(no_cores, outfile = "")
。
【讨论】:
跑步回来后会进行测试,但这听起来正是我所需要的 :)以上是关于在foreach循环内没有收到标准输出[重复]的主要内容,如果未能解决你的问题,请参考以下文章
假如数组接收到一个null,那么应该怎么循环输出。百度结果,都需要提前判断。否则出现空指针异常。。我还是想在数组中实现保存和输出null。