首页 > 解决方案 > Python:为什么函数中定义的对象在函数返回后没有被垃圾收集

问题描述

我正在搞乱QueueHandlerPython logging cookbook的示例表单。我在 a 中设置了日志记录setup_logging.py/setup_logging,我在其中定义了一个QueueListener对象。但是没有对象持有对 的引用QueueListener,因此当函数返回时,我假设它将被垃圾收集。但不是吗?这是为什么?

日志记录设置文件:

import queue
import logging
import logging.handlers


def setup_logging():

    que = queue.Queue(-1)  # no limit on size
    queue_handler = logging.handlers.QueueHandler(que)
    handler = logging.StreamHandler()
    listener = logging.handlers.QueueListener(que, handler)
    root = logging.getLogger()
    root.setLevel(0)
    root.addHandler(queue_handler)
    formatter = logging.Formatter('%(threadName)s: %(message)s')
    handler.setFormatter(formatter)

    listener.start()

主文件

import time
from setup_logging import setup_logging

if __name__=="__main__":
    setup_logging()
    import logging
    import gc
    gc.collect()
    gc.collect()
    logger = logging.getLogger()
    logger.info("bond")
    logger.info("james bond")

    time.sleep(2.0)

标签: python-3.x

解决方案


推荐阅读