doSMP不想启动一些工人

时间:2011-09-07 10:20:11

标签: r parallel-processing

我用来加载R中的doSMP包。

然而,今天,它不起作用,我不明白为什么......

我已多次尝试rmSessions(all=TRUE),但问题仍然存在!

尽管如此,getDoParWorkers()表明我没有注册并行后端...

你有解决方案吗?

错误讯息:

> library(doSMP)
Le chargement a nécessité le package : foreach
Le chargement a nécessité le package : iterators
Le chargement a nécessité le package : codetools
foreach: simple, scalable parallel programming from REvolution Computing
Use REvolution R for scalability, fault tolerance and more.
http://www.revolution-computing.com
Le chargement a nécessité le package : revoIPC
> w <- startWorkers(4)
Erreur dans startWorkers(4) : unable to create a task queue: limit exceeded
De plus : Messages d'avis :
1: In startWorkers(4) : there is an existing doSMP session using doSMP1
2: In startWorkers(4) : there is an existing doSMP session using doSMP2
3: In startWorkers(4) : there is an existing doSMP session using doSMP3
4: In startWorkers(4) : there is an existing doSMP session using doSMP4
5: In startWorkers(4) : there is an existing doSMP session using doSMP5
6: In startWorkers(4) : there is an existing doSMP session using doSMP6
7: In startWorkers(4) : there is an existing doSMP session using doSMP7
8: In startWorkers(4) : there is an existing doSMP session using doSMP8
9: In startWorkers(4) :
possible leak of worker sessions: consider using FORCE=TRUE
> getDoParWorkers()
[1] 1

1 个答案:

答案 0 :(得分:1)

对rmSessions()的调用可以构造为:

rmSessions(all.names=TRUE)

(而不是全部= TRUE),在我的电脑上工作得很好。如果这确实不起作用:

w <- startWorkers(4,FORCE=TRUE) 

应该打开它们。正如错误消息中所解释的那样。在奇怪的情况下,问题是持久的,重新启动Windows通常是唯一的解决方案。这也是记录在案的。

无论如何,你应该确保无论发生什么,你总是打电话给stopWorkers(w)。这样可以避免这个问题。

接下来,如果您想检查DoParWorkers,首先必须先注册它们才能看到它们:

> w <- startWorkers(4)
> getDoParWorkers()
[1] 1
> registerDoSMP(w)
> getDoParWorkers()
[1] 4

请再次仔细阅读文档。你必须严格遵守它,否则你将在计算机上进行时髦的生意。如果你不小心对待它,DoSMP可能是一个恶毒的混蛋。

http://cran.r-project.org/web/packages/doSMP/doSMP.pdf

http://cran.r-project.org/web/packages/doSMP/vignettes/gettingstartedSMP.pdf

PS:如果您尝试了所有这些,并更新到R的最新版本和您使用的软件包,但它仍然无法正常工作,那么请给我们一个可重现的示例(您的代码不能与正确的代码)并包括所有版本号。


在旁注中,我停止使用doSMP因为它经常使我的R陷入僵局。 foreach还有其他后端可以更好地工作,至少对我而言。我将snowdoSnow函数的registerDoSnow()包结合使用。事实上,对于大多数并行的事情,你也可以snowfall。它是snow的前端,对我来说很好。