from __future__ import print_function from multiprocessing import Process import logging import time from concurrent.futures import ThreadPoolExecutor class ThreadPoolLogger(logging.Handler): level = 10 def __init__(self): self.executor = ThreadPoolExecutor(max_workers=2) def handle(self, record): self.executor.submit(self.send, record) def send(self, record): print(record) logger = logging.Logger('example', level=10) logger.handlers.append(ThreadPoolLogger()) def exit(): logger.info('exiting') def hang(): while True: proc = Process(target=exit) proc.daemon = True logger.info('forking') proc.start() logger.info(proc.pid) time.sleep(.05) hang()