В одном из моих сценариев у меня есть что-то вроде:
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()
, тогда все будет работать так, как задумано.