многопроцессорный пул размером 3 - журналы создаются только для первых 3 процессов - PullRequest
0 голосов
/ 05 мая 2020

это сводит меня с ума. Я работаю с пулом многопроцессорной обработки python3 размером 3 и создаю журнал для каждого процесса. Создаются только первые 3 лога !!! что мне не хватает?

from time import sleep
import logging, os, multiprocessing as mp

def do_it(proc_num):
    log_file = f'{proc_num}.log'
    print(f"start {proc_num} {os.getpid()} {log_file}")
    logging.basicConfig(filename=log_file, level=logging.INFO)
    try:
        for iter in range(5):
            sleep(1)
            logging.info(f"{proc_num}: hello {iter}")
    finally:
        print(f"finalizing {proc_num}")
        logging.shutdown()
        logger = logging.getLogger()
        logger.handlers[0].flush()
        sleep(3)

if __name__ == '__main__':
    pool = mp.Pool(3)
    pool.map(do_it, [1, 2, 3, 4, 5, 6, 7])
    pool.close()

и результат:

ls *.log
1.log 2.log 3.log

wat?!?!


ПРИМЕЧАНИЕ: НЕ то же самое, что Как мне войти при использовании многопроцессорной обработки в Python? , потому что я ХОЧУ отдельный файл журнала для каждого процесса.

1 Ответ

0 голосов
/ 05 мая 2020

хорошо, мне нужно было просто посмотреть журналы, чтобы увидеть ответ ...

cat 3.log 
INFO:root:3: hello 0
INFO:root:3: hello 1
INFO:root:3: hello 2
INFO:root:3: hello 3
INFO:root:3: hello 4
INFO:root:4: hello 0
INFO:root:4: hello 1
INFO:root:4: hello 2
INFO:root:4: hello 3
INFO:root:4: hello 4

очевидно, тот же файл журнала используется для всех задач, выполняемых этим процессом

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