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