python - 记录多线程应用程序。[Errno 24] 打开的文件太多
问题描述
5个线程共享同一个logger类实例和logfile,raise[Errno 24] Too many open files
尝试覆盖每次记录后logging
关闭的方法。file handler
class RootLogger():
def __init__(self):
self.logger = None
# skeleton for creating custom logger
# name - name of the logger, string or class/module name
def set_config(self, name, logfile):
self.logger = logging.getLogger(name)
# format of the message
formatter = logging.Formatter('%(asctime)s - [%(name)s] [%(levelname)s] %(message)s')
# log file rotation, 8mb
handler = RotatingFileHandler(logfile, maxBytes=8000000, backupCount=5)
handler.setFormatter(formatter)
self.logger.setLevel(logging.DEBUG)
self.logger.addHandler(handler)
self.logger.setLevel(logging.DEBUG)
self.logger.propagate = False
return self.logger
# patch for excluding 'too many opened files' error
def handler_close(self):
handlers = self.logger.handlers
for handler in handlers:
handler.close()
# override commands
def info(self, msg):
self.logger.info(msg)
self.handler_close()
def debug(self, msg):
self.logger.debug(msg)
self.handler_close()
def error(self, msg):
self.logger.error(msg)
self.handler_close()
def warning(self, msg):
self.logger.warning(msg)
self.handler_close()
def critical(self, msg):
self.logger.warning(msg)
self.handler_close()
解决方案
推荐阅读
- php - 在我的 PHP 页面上点击提交后,没有任何反应。数据应导入我的 php 数据库
- vba - 如何在访问中获取组合框的选定值
- python - DataFrame - If 语句导致 NotImplementedError: 找不到匹配的操作码 'and_bdd' 后跟 ValueError
- python - Windows 致命异常:使用 tensorboard 访问冲突
- python - Python 函数,可帮助根据收到的输入选择输出(构建聊天机器人)
- react-native - 抽屉导航内的堆栈导航反应原生?
- apache-spark - 我们可以在带有 beta 版的 PROD 环境中的 Kubernetes 上使用 spark 吗?
- python-3.x - 在函数中使用参数
- javascript - @HostListener 如何进行事件绑定?
- verilog - 带有 1 位全减法器的 4 位全减法