mclapply 在背靠背使用多个实例时挂起
mclapply hangs when using multiple instances back to back
我正在尝试使用 kaggle reddit comments challenge 中的数据创建手套模型。我加载 table,拉取 body,现在我正在尝试清理文本。
我提取了一小部分(100000 个标题)进行试验,这是我目前所拥有的:
library(DBI)
require(RSQLite)
library(dplyr)
library(parallel)
library(progress)
library(textclean)
titles = as.character(df$body)
numcores = detectCores()
i = 1
temp = {}
out = {}
while(i <= 100000){
temp = titles[i:(i+1000)] %>%
mclapply(replace_emoji, mc.cores = numcores) %>%
mclapply(replace_url, mc.cores = numcores) %>%
mclapply(replace_contraction, mc.cores = numcores) %>%
mclapply(gsub, pattern = "[^[:alnum:][:space:]]",replacement = "") %>%
mclapply(replace_number, mc.cores = numcores)
i = i+1000
out = c(out, temp)
print(i)
}
但它似乎在随机的地方挂着赌注。它不会导致错误,它只是停止。当我查看我的 activity 监视器时,我发现 CPU 的使用率只是下降并且永远不会恢复。
我不知道我需要提供什么才能使这个请求更容易分解,所以请告诉我,我会进行编辑。
我用的 mclapply 错了吗?
我使用的是 mac 16 GB i7,8 核。
编辑:我环顾四周,找到了类似 this and this 的答案,但它们对我没有帮助。
另外,如果我只使用 lapply.
似乎就可以了
如果我不在它们之间使用 mclapply 将它们背靠背堆叠,而是创建一个新函数并使用一次 mclapply,这似乎可行。
cleaner = function(vec){
vec %>%
replace_emoji() %>%
replace_url() %>%
replace_contraction() %>%
Num_Al_sep() %>%
gsub(pattern = "[^[:alnum:][:space:]]", replacement = "") %>%
replace_number()
}
i = 1
temp = {}
out = {}
while(i <= 100000){
temp = titles[i:(i+1000)] %>%
mclapply(cleaner)
i = i+1000
out = c(out, temp)
#pb$tick()
print(i)
}
嵌套循环导致了问题。并行循环的一次重复不应等待另一循环重复进行。如果并行循环被确定为顺序重复,就会发生死锁。
并行工作并不总能产生良好的效率。
我正在尝试使用 kaggle reddit comments challenge 中的数据创建手套模型。我加载 table,拉取 body,现在我正在尝试清理文本。
我提取了一小部分(100000 个标题)进行试验,这是我目前所拥有的:
library(DBI)
require(RSQLite)
library(dplyr)
library(parallel)
library(progress)
library(textclean)
titles = as.character(df$body)
numcores = detectCores()
i = 1
temp = {}
out = {}
while(i <= 100000){
temp = titles[i:(i+1000)] %>%
mclapply(replace_emoji, mc.cores = numcores) %>%
mclapply(replace_url, mc.cores = numcores) %>%
mclapply(replace_contraction, mc.cores = numcores) %>%
mclapply(gsub, pattern = "[^[:alnum:][:space:]]",replacement = "") %>%
mclapply(replace_number, mc.cores = numcores)
i = i+1000
out = c(out, temp)
print(i)
}
但它似乎在随机的地方挂着赌注。它不会导致错误,它只是停止。当我查看我的 activity 监视器时,我发现 CPU 的使用率只是下降并且永远不会恢复。
我不知道我需要提供什么才能使这个请求更容易分解,所以请告诉我,我会进行编辑。
我用的 mclapply 错了吗?
我使用的是 mac 16 GB i7,8 核。
编辑:我环顾四周,找到了类似 this and this 的答案,但它们对我没有帮助。 另外,如果我只使用 lapply.
似乎就可以了如果我不在它们之间使用 mclapply 将它们背靠背堆叠,而是创建一个新函数并使用一次 mclapply,这似乎可行。
cleaner = function(vec){
vec %>%
replace_emoji() %>%
replace_url() %>%
replace_contraction() %>%
Num_Al_sep() %>%
gsub(pattern = "[^[:alnum:][:space:]]", replacement = "") %>%
replace_number()
}
i = 1
temp = {}
out = {}
while(i <= 100000){
temp = titles[i:(i+1000)] %>%
mclapply(cleaner)
i = i+1000
out = c(out, temp)
#pb$tick()
print(i)
}
嵌套循环导致了问题。并行循环的一次重复不应等待另一循环重复进行。如果并行循环被确定为顺序重复,就会发生死锁。
并行工作并不总能产生良好的效率。