Можно ли запускать pymystem3 в docker используя multiprocessing?

Привет!
У меня стоит задача: нужно лематизировать большое количество текста находясь в docker контейнере.
Я пытаюсь это делать используя multiprocessing, но получаю ошибку:
OSError: [Errno 26] Text file busy: '/root/.local/bin/mystem'
При этом локально код на компьютере нормально отрабатывается.
Сам код:
script.py
import multiprocessing
import time
from pymystem3 import Mystem


def lemma(data):
    process_n = data[0]
    texts = data[1]
    print("process_n", process_n, "Создали Mystem()")
    m = Mystem()
    lemma_text = m.lemmatize(' '.join(texts))
    m.close()
    print("process_n", process_n, "Закрыли Mystem()")
    return lemma_text


def lemmatisation_text():
    n_core = 4
    texts = ['Мама моет раму, Рама держит маму.' for x in range(1000)]
    # Добавим номера процессов
    params = [[core, texts] for core in range(n_core)]
    print('pool start')
    pool = multiprocessing.Pool(n_core)
    print('pool map')
    res = pool.map(lemma, params)
    print('pool close')
    pool.close()
    print('pool join')
    pool.join()
    print(len(res))


if __name__ == '__main__':
    start = time.time()
    lemmatisation_text()
    print(time.time() - start)

Dockerfile
FROM python:3.8-buster

WORKDIR /usr/src/app

COPY . .

RUN python3.8 -m pip install --upgrade pip
RUN python3.8 -m pip install --no-cache-dir pymystem3

CMD ["python3.8", "script.py"]

Устал искать ошибку, помогите советом, пожалуйста.
  • Вопрос задан
  • 388 просмотров
Пригласить эксперта
Ответы на вопрос 2
Viji
@Viji
DevOps Engineer
Попробуй запустить докер с 2-мя или более cpu, скорее всего он у тебя не использует др ядра - или их нет ))

docker run --cpusets-cpus 0-4
Ответ написан
Комментировать
ScriptKiddo
@ScriptKiddo
Положите нужный бинарник по пути /.local/bin при сборке контейнера, должно помочь

Ссылки на скачивание
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы