【问题标题】:why aren't logging files closed after celery tasks为什么在芹菜任务后没有关闭日志文件
【发布时间】:2015-12-03 23:00:38
【问题描述】:
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 函数运行,则代码运行良好。

但是,如果我在 celery/supervisord 中使用它: fn.delay("日志文件") 该文件被打开并且永远不会关闭(由在 supervisord 中使用的用户)。当然,一段时间后,我打开了数百个文件,这非常糟糕并导致其他麻烦。为什么这种情况只发生在 celery 任务中,如何避免?

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

感谢任何帮助

【问题讨论】:

    标签: python linux python-2.7 celery supervisord


    【解决方案1】:

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

    logger.removeHandler(handler)
    

    【讨论】:

      猜你喜欢
      • 2020-11-03
      • 1970-01-01
      • 2020-05-30
      • 2014-01-31
      • 2021-04-25
      • 2020-04-09
      • 1970-01-01
      • 2011-12-29
      • 2023-01-31
      相关资源
      最近更新 更多