【发布时间】:2019-11-03 19:07:16
【问题描述】:
我有一个 python jupyter notebook,我在其中运行一些数据获取代码,它给了我一个 fcs 文件列表。我在 R 中使用 fcsparser 和一个 foreach 并行解析这些:
%%R -i files -o data_fcs
library(dplyr)
library(doParallel)
library(foreach)
library(flowCore)
registerDoParallel(cores=4)
trans = arcsinhTransform(transformationId='arcsinhTransform',a=0,b=(1/5),c=0)
print("a")
data_fcs <- foreach(file=files) %dopar% {
library(flowCore)
print(sprintf("%s", file))
# load fcs file
fcs = read.FCS(file)........(more code after this)
“a”是在 foreach 循环之前打印的,但我猜里面的东西永远不会被执行,因为没有其他东西被打印,因为代码只是无休止地运行。我的机器(MacBook Pro 笔记本电脑)有 4 个内核。
有时,代码在大约一分钟内随机运行,脚本完成,这对我来说很奇怪。这个问题的原因可能是什么?谢谢!
【问题讨论】:
-
foreach创建的每个子流程都会自动忽略其输出,因此您不会看到其中使用的print语句的任何输出。 -
我会避免在像 Jupyter(一个可视化、数据分析、原型设计平台)这样的 IDE 中运行复杂的进程,比如 R 的并行处理,甚至在像
rpy2这样的语言 API 中通过 Jupyter 魔术函数调用。这么多层次。考虑在命令行运行进程(python 的subprocess-> R 的Rscript.exe)并将数据结果导入 Jupyter 以供最终使用数据工作。节省内存! -
感谢您的建议!
标签: python r foreach jupyter-notebook core