cobertura de execução em python no processo sem fim

Eu tenho um servidor web multiprocessado com processos que nunca terminam. Gostaria de verificar minha cobertura de código em todo o projeto em um ambiente ativo (não apenas em testes).

O problema é que, como os processos nunca terminam, eu não tenho um bom lugar para definir ocov.start() cov.stop() cov.save() ganchos.

Portanto, pensei em gerar um encadeamento que, em um loop infinito, salvará e combinará os dados de cobertura e depois dormirá algum tempo; no entanto, essa abordagem não funciona, o relatório de cobertura parece estar vazio, exceto na linha de suspensão.

Eu ficaria feliz em receber algumas idéias sobre como obter a cobertura do meu código ou qualquer conselho sobre por que minha ideia não funciona. Aqui está um trecho do meu código:

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 :)"

questionAnswers(3)

yourAnswerToTheQuestion