当我尝试在Mac上的R中使用parallel
包时,我遇到了一些问题。
以下是并行包正常工作的方式。
cl = makeCluster(2) # Using 2-core parallel as an example
# Your parallel code
stopCluster(cl)
当我运行此代码时,cl = makeCluster(2)
无限挂起。我试图解决它,但失败了。我还提到了其他一些帖子。几个潜在原因包括内存不足、安装错误等。它们似乎不是这里的问题,因为我重新启动了会话,重新安装了 R,但问题仍然存在。
我想问题在于R尝试连接到内核时的权限。这是我发现的。我使用future
包来查看连接到内核的具体过程。附上代码及其返回。
cl <- future::makeClusterPSOCK(2, verbose = TRUE)
工作线程: [n = 2] 'localhost', 'localhost' 基端口:11303 创建节点 1 的 2 ... - 设置节点 在"localhost"上启动工作线程 #1: '/Library/Frameworks/R.framework/Resources/bin/Rscript' --default packages=datasets,utils,grDevices,graphics,stats,methods -e 'parallel:::.slaveRSOCK((' MASTER=localhost PORT=11303 OUT=/dev/null TIMEOUT=2592000 XDR=TRUE
等待"本地主机"上的工作线程 #1 重新连接
问题是本地主机永远不会重新连接...
以下是我的会话信息。我希望这有所帮助。
R 版本 3.5.1 (2018-07-02(。
平台:x86_64-苹果-达尔文15.6.0(64 位(。
运行于:macOS High Sierra 10.13.6。矩阵产品:默认。BLAS:/System/Library/Frameworks/Accelerate.framework/Versions/A/
Frameworks/vecLib.framework/Versions/A/libBLAS.dylib.
LAPACK:/Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib区域设置:
[1] en_US.UTF-8/en_US。UTF-8/en_US。UTF-8/C/en_US.UTF-8/en_US。UTF-8附加基础包:
[1] 统计图形 grDevices 利用数据集方法库通过命名空间加载(未附加(:
[1] compiler_3.5.1 parallel_3.5.1 tools_3.5.1 listenv_0.7.0 codetools_0.2-15 digest_0.6.16
[7] globals_0.12.2 future_1.9.0
有趣的是,相同的代码适用于我的旧 Mac 机器(相同的操作系统,但硬件较旧(。我不知道这里发生了什么。任何帮助不胜感激!谢谢!
几个潜在原因包括内存不足、安装错误等。它们似乎不是这里的问题,因为我重新启动了会话,重新安装了 R,但问题仍然存在。
正确,这里不应该涉及这些类型的问题。 你显示的调用使用 R 的基本内置功能(主要来自"并行"包(,并且涉及的内存使用量很少。
我想问题在于R尝试连接到内核时的权限。[...]
parallel:makeCluster(2)
和future::makeClusterPSOCK(2)
都会启动辅助角色(使用parallel:::.slaveRSOCK()
(,这些辅助角色是在后台运行的独立 R 会话。 主会话和这些工作线程通过套接字进行通信。 所以,是的,可能是您遇到了防火墙问题,阻止 R 打开这些端口。 (我不知道足够的macOS来解决这个问题(
通过设置outfile = NULL
,您还将获得有关工人端发生的情况的信息。这是它工作时的样子:
> cl <- future::makeClusterPSOCK(1, outfile = NULL, verbose = TRUE)
Workers: [n = 1] ‘localhost’
Base port: 11306
Creating node 1 of 1 ...
- setting up node
Starting worker #1 on ‘localhost’: '/usr/lib/R/bin/Rscript' --default-packages=datasets,utils,grDevices,graphics,stats,methods -e 'parallel:::.slaveRSOCK()' MASTER=localhost PORT=11306 OUT= TIMEOUT=2592000 XDR=TRUE
Waiting for worker #1 on ‘localhost’ to connect back
starting worker pid=7608 on localhost:11306 at 14:46:57.827
Connection with worker #1 on ‘localhost’ established
- assigning connection UUID
- collecting session information
Creating node 1 of 1 ... done
附言。您只需要一个工作人员来解决此问题。
经过数周的尝试,我终于解决了这个问题。我把我的答案放在这里。
该问题实际上是由macOS中的某些未知防火墙问题引起的。解决方案是重新安装整个操作系统...我知道这听起来很愚蠢和麻烦,但在那之后问题就解决了。
这样做的动机是我碰巧注意到我无法访问主目录下的某些文件夹(我尝试使用sudo
修改某些文件,但没有被授予访问权限(。这是我的个人笔记本电脑,不应该有这样的问题。然后我意识到这台Mac是从我的旧Mac同步的。同步过程可能会导致一些防火墙问题。