покрытие Python на бесконечный процесс

У меня есть многопроцессорный веб-сервер с процессами, которые никогда не заканчиваются, я хотел бы проверить покрытие кода для всего проекта в реальной среде (не только в тестах).

Проблема в том, что, поскольку процессы никогда не заканчиваются, у меня нет подходящего места для установкиcov.start() cov.stop() cov.save() крючки.

Поэтому я подумал о создании потока, который в бесконечном цикле будет сохранять и объединять данные покрытия, а затем некоторое время спать, однако этот подход не работает, отчет о покрытии кажется пустым, за исключением строки ожидания.

Я был бы рад получить любые идеи о том, как получить покрытие моего кода, или любой совет о том, почему моя идея не работает. Вот фрагмент моего кода:

import coverage
cov = coverage.Coverage()
import time
import threading
import os

class CoverageThread(threading.Thread):
    _kill_now = False
    _sleep_time = 2

@classmethod
def exit_gracefully(cls):
    cls._kill_now = True

def sleep_some_time(self):
    time.sleep(CoverageThread._sleep_time)

def run(self):
    while True:
        cov.start()
        self.sleep_some_time()
        cov.stop()
        if os.path.exists('.coverage'):
            cov.combine()
        cov.save()
        if self._kill_now:
            break
    cov.stop()
    if os.path.exists('.coverage'):
        cov.combine()
    cov.save()
    cov.html_report(directory="coverage_report_data.html")
    print "End of the program. I was killed gracefully :)"

Ответы на вопрос(3)

Ваш ответ на вопрос