使用并发期货 ProcessPoolExecutor 时登录主进程
Logging in main process when using concurrent futures ProcessPoolExecutor
关于如何让分叉进程登录到主进程有什么想法吗?
我的设置是这样的:
from itertools import repeat
from concurrent.futures import ProcessPoolExecutor
logger = logging.getLogger(__name__)
def worker_process(i, logger):
logger.info(f"{i}")
with ProcessPoolExecutor(max_workers=4) as executor:
logger.info("Starting")
executor.map(worker_process, range(5), repeat(logger))
您的工作进程确实记录到主线程。
您没有看到任何日志输出,因为 logger
的默认日志级别高于 INFO
。
将日志记录设置为 INFO
,您将看到输出:
from itertools import repeat
from concurrent.futures import ProcessPoolExecutor
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def worker_process(i, logger):
logger.info(f"{i}")
with ProcessPoolExecutor(max_workers=4) as executor:
executor.map(worker_process, range(5), repeat(logger))
结果:
INFO:__main__:0
INFO:__main__:4
INFO:__main__:3
INFO:__main__:1
INFO:__main__:2
关于如何让分叉进程登录到主进程有什么想法吗?
我的设置是这样的:
from itertools import repeat
from concurrent.futures import ProcessPoolExecutor
logger = logging.getLogger(__name__)
def worker_process(i, logger):
logger.info(f"{i}")
with ProcessPoolExecutor(max_workers=4) as executor:
logger.info("Starting")
executor.map(worker_process, range(5), repeat(logger))
您的工作进程确实记录到主线程。
您没有看到任何日志输出,因为 logger
的默认日志级别高于 INFO
。
将日志记录设置为 INFO
,您将看到输出:
from itertools import repeat
from concurrent.futures import ProcessPoolExecutor
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def worker_process(i, logger):
logger.info(f"{i}")
with ProcessPoolExecutor(max_workers=4) as executor:
executor.map(worker_process, range(5), repeat(logger))
结果:
INFO:__main__:0
INFO:__main__:4
INFO:__main__:3
INFO:__main__:1
INFO:__main__:2