mclapply зависает при использовании нескольких экземпляров вплотную - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь создать перчаточную модель с данными из запроса комментариев Reddit .Я загружаю таблицу, вытягиваю тело, и теперь я пытаюсь очистить текст.

Я вытащил небольшое подмножество (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)
}

Но, похоже, ставки висели в случайных местах.Это не вызывает ошибку, оно просто останавливается.Когда я смотрю на монитор активности, я вижу, что загрузка ЦП просто падает и никогда не восстанавливается.

Я не знаю, что мне нужно предоставить, чтобы упростить разложение этого запроса, поэтому, пожалуйста, дайте мне знать, и я отредактирую его.

Я неправильно использую mclapply?

Я использую Mac 16 ГБ i7 с 8 ядрами.

Редактировать: я осмотрелся и нашел ответы типа , и , , но они не помогли мне.Кроме того, это похоже на работу, если я просто использую lapply.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Вложенные циклы вызвали проблему.Одно повторение параллельного цикла не должно ожидать продолжения другого цикла.Возникает тупик, если определено, что параллельный цикл повторяется последовательно.

Параллельная работа не всегда дает хорошую эффективность.

0 голосов
/ 21 февраля 2019

Кажется, это работает, если я не сложу их вплотную с 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)
}
...