Docker 关闭 python 程序太快了

问题描述 投票:0回答:0

所以我一直在努力开始使用代码覆盖率进行测试,为此我使用了 coverage api。在 docker 之外运行它时一切都很好,但是当使用 docker 运行它时它停止得太早以保存 .coverage 文件。

这是我的退出处理程序:

import logging
import signal

import config

logger = logging.getLogger(__name__)


class Exit:
    def __init__(self, cov):
        self.cov = cov
        signal.signal(signal.SIGTERM, self.exit_cleanly)
        signal.signal(signal.SIGINT, self.exit_cleanly)
        signal.signal(signal.SIGABRT, self.exit_cleanly)

    def exit_cleanly(self, signal_number, stackframe):
        logger.info("Received exit signal. Exiting...")
        if config.coverage:
            self.cov.save()
        quit(0)

这是我的覆盖处理程序:

from coverage import Coverage

import config
import logging
from time import time

logger = logging.getLogger(__name__)


class CoverageHandler:
    def __init__(self):
        if config.coverage:
            coveragedatafile = ".coverage-" + str(int(time()))
            self.cov = Coverage(data_file=f"{config.datadir_server}/coverage/{coveragedatafile}")

    def start(self):
        if config.coverage:
            logger.info("Started coverage engine")

            self.cov.start()

    def save(self):
        if config.coverage:
            logger.info("Saving coverage files")

            try:
                self.cov.stop()
                self.cov.save()
                logger.info("Successfully saved coverage")
            except Exception as e:
                logger.critical("Exception occurred while saving coverage:")
                logger.critical(e)
            finally:
                quit(0)

根据日志,它似乎在说它将保存覆盖文件后停止了

matrix-notifier-tester exited with code 137
matrix-notifier-bot | 03-09 17:35 Received exit signal. Exiting...
matrix-notifier-bot | 03-09 17:35 Saving coverage files
matrix-notifier-bot exited with code 0
matrix-notifier-server exited with code 0

起初我认为这与我使用

--abort-on-container-exit
的事实有关,但我尝试在没有它的情况下运行它并且它似乎没有改变任何东西

我花了很多时间寻找有类似问题的人,但找不到。

python docker docker-compose exit
© www.soinside.com 2019 - 2024. All rights reserved.