为什么芹菜任务后没有关闭日志文件

时间:2015-12-03 23:00:39

标签: python linux python-2.7 celery supervisord

def fn(filename):
    import logging
    logger = logging.getLogger(filename)
    formatter = logging.Formatter('[%(asctime)s:%(msecs)d], [%(levelname)s], %(message)s, ')
    handler = logging.FileHandler(filename + ".log")
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    logger.error("that's an error")

基本上我只是使用python日志库进行日志记录。如果我将它作为普通的python函数运行,代码工作正常。

但是,如果我在芹菜/ supervisord中使用它:     fn.delay( “loggingFile”) 该文件已打开且从未关闭(由supervisord中使用的用户)。当然,经过一段时间后,我有数百个打开的文件非常糟糕并导致其他麻烦。为什么只有celery任务发生这种情况以及如何避免它?

我知道通过使用lsof监视系统来查看哪些用户正在打开哪些文件,文件永远不会关闭。

感谢任何帮助

1 个答案:

答案 0 :(得分:0)

由于某种原因,守护程序不会关闭文件处理程序。完成日志记录后,您需要手动使用它:

logger.removeHandler(handler)