Регистрация вложенных функций с помощью joblib Параллельные и отложенные вызовы - PullRequest
0 голосов
/ 20 сентября 2019

В одном из моих сценариев у меня есть что-то вроде:

import logging
from joblib import Parallel, delayed

def f_A(x):
    logging.info("f_A "+str(x))

def f_B():
    logging.info("f_B")
    res = Parallel(n_jobs=2, prefer="processes")(delayed(f_A)(x) for x in range(10))


if __name__ == "__main__":
   logging.basicConfig(level=logging.INFO)
   f_B()

Я ожидаю, что при запуске python script.py что-то вроде:

INFO:root:f_B
INFO:root:f_A

будет отображаться в консоливместо этого я вижу:

INFO:root:f_B

, но информация от f_A не отображается.

Как я могу получить f_A - и в конечном итоге функции, вызываемые оттуда - для отображения вжурналы?

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

import logging
from joblib import Parallel, delayed

def f_A(x):
    logging.basicConfig(level=logging.INFO)
    logging.info("f_A "+str(x))

def f_B():
    logging.info("f_B")
    res = Parallel(n_jobs=2, prefer="processes")(delayed(f_A)(x) for x in range(10))


if __name__ == "__main__":
   logging.basicConfig(level=logging.INFO)
   f_B()

, тогда все будет работать так, как задумано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...