Una respuesta para QGIS 3.16 (no probado en versiones anteriores)
Tienes 3 grupos posibles en el perfilador en este momento en QGIS (inicio
, cargadeproyecto
, renderizado
). Debes tener en cuenta que ahora hay un widget con el contenido del perfilador (ver captura de pantalla)
Para obtener la lista actual de grupos utilizados, haz QgsApplication.profiler().groups()
Para obtener el tiempo de todas las mediciones existentes (por defecto o las tuyas propias)
perfilador = QgsApplication.profiler()
for grupo in perfilador.groups():
nombreGrupoTraducido = perfilador.translateGroupName(grupo)
for hijo in perfilador.childGroups('', grupo):
valor = perfilador.profileTime(hijo, grupo)
grupoHijo = perfilador.childGroups(hijo, grupo)
# grupo = nombre en el combobox de la GUI pero amigable para humanos
# hijo = nombre de la primera columna
# Tiempo de ejecución
print(nombreGrupoTraducido, hijo, valor)
if len(grupoHijo) > 0:
for subGrupo in grupoHijo:
print(subGrupo, perfilador.profileTime(subGrupo, grupo))
# Cosa rara aquí = el orden al recorrer difiere del que se muestra en la GUI...
# Para el tiempo global por grupo, en teoría, deberías hacer lo siguiente
# pero no funciona (retorna 0.0)
# En cambio, puedes sumar valores en el bucle anterior para obtener el tiempo total "correcto"
for grupo in perfilador.groups():
print(grupo, perfilador.totalTime(grupo))
Si quieres tus propias medidas con tu propio grupo
from time import sleep
perfilador = QgsApplication.profiler()
perfilador.start('nombre de tu tarea 1', 'nombre de tu nuevo grupo')
# Para simular tiempo de espera pero normalmente, ejecutas tu código personalizado
sleep(11.0)
perfilador.end('nombre de tu nuevo grupo')
perfilador.start('nombre de tu tarea 2', 'nombre de tu nuevo grupo')
# Para simular tiempo de espera pero normalmente, ejecutas tu código personalizado
sleep(8.0)
perfilador.end('nombre de tu nuevo grupo')
# Forma alterna de evitar start y end usando contexto de Python
# Desventaja: no puedes registrar en tu propio grupo sino solo en el grupo de inicio (por defecto)
with QgsRuntimeProfiler.profile('qwerty'):
sleep(2)
# Hacer algo