Задать вопрос
@GSimonX37

Почему зависает дочерний процесс созданный с помощью Pool?

Я запускаю выполнение функции optimize в 5 процессах, и вывожу прогресс на экран. После того, как работа функции завершилась (определяю по выводимому прогрессу) дочерние процессы не завершаются, и основной процесс не выходит из менеджера контекста with Pool(n_jobs) as pool, процессы также видны в диспетчере задач, но ресурсов не потребляют. Время выполнение функции в отдельном процессе примерно 5 - 10 часов. Т.е. 5 - 10 часов функции выполняют "полезную работу" после чего, процессы "зависают". С чем это может быть связано? Это может быть связано с тем, что я в основном процессе создаю экземпляр класса Verbose, передаю его в функцию, которая выполняется в отдельном процессе и которая изменяет этот класс внутри отдельного процесса?

Дополню. Если функция optimize выполняется не так долго (примерно 1 час - я просто уменьшаю объем необходимой работы), то все работает корректно, основной процесс выходит из менеджера контекста with Pool(n_jobs) as pool и код выполняется дальше. Т.е. если функция "слишком долго" выполняется в дочернем процессе, то дочерний процесс не завершается.

Также я заметил, что вместо 6 процессов (1 главный и 5 дочерних) создаются 8 процессов. Может ли это быть причиной ошибки?

Главный файл:
if __name__ == "__main__":
    training(5)


Файл с функцией training:
def optimize(n_trials, model, verbose, seed):
    study = optuna.create_study(
        direction='maximize',
        sampler=TPESampler(seed=seed)
    )

    study.optimize(
        model,
        n_trials=n_trials,
        callbacks=[verbose]
    )

    return study


def training(n_jobs):
    args = []
    for i in range(n_jobs):
        verbose = Verbose(n_trials, model.name, i + 1)
        seed = random.randint(1, 10_000)
        args += [[n_trials, model, verbose, seed]]
    with Pool(n_jobs) as pool:
        studies = pool.starmap(optimize, args)
  • Вопрос задан
  • 100 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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