python-3.x - Python:为什么函数中定义的对象在函数返回后没有被垃圾收集
问题描述
我正在搞乱QueueHandler
Python 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)
解决方案
推荐阅读
- javascript - 为什么 xaxis 和 yaxis 刻度不出现在 D3 的轴上?
- django - Get Data from Multiple ForeignKey Query Results
- python - 通用数学方程
- c++ - 使用文件中的数字作为输入来计算它们 c++
- python - python将列表与列表的比较列表
- javascript - ReferenceError:当我使用 vuejs 设置 PayPal Checkout 时,未定义 paypal
- java - java.lang.IllegalArgumentException:插件已经初始化
- terraform - Terraform:无法配置 aws ecs 自动缩放集群
- latex - 乳胶缺失 $ 插入
- nativescript - Nativescript update UI on ObservableArray push