2011-09-07 34 views
1

我使用加載doSMP包河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

到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的前端,對我來說工作正常。

+0

很好的回答。我從來沒有想到DoSMP是惡毒的。 :)它似乎具有在Windows下顯示的行爲,我根本沒有在Linux下使用doMC看到 - 不知道它是doMC還是Windows或我的用法。 – Iterator

+0

@Joris Meys。我會按照你的建議:更新我的R版本。我希望這可以解決問題。謝謝你的回答。 – Marco

+0

@Joris Meys。我剛剛卸載了我的最新版本並重新安裝了新版本,並且它工作正常! :-) – Marco