Skip to content

Instantly share code, notes, and snippets.

@kaidokert
Last active November 24, 2016 17:29
Show Gist options
  • Select an option

  • Save kaidokert/55dbae93ae20b6e407b2bd056efa6daf to your computer and use it in GitHub Desktop.

Select an option

Save kaidokert/55dbae93ae20b6e407b2bd056efa6daf to your computer and use it in GitHub Desktop.
Django hooks to log slow database queries from celery tasks
import logging
from django.db import connection
from django.conf import settings
from celery.signals import task_prerun, task_postrun
from time import time
@task_prerun.connect()
def task_prerun(signal=None, sender=None, task_id=None, task=None, args=None, kwargs=None, retval=None, state=None):
if settings.SLOW_TASK_QUERY_LOG:
connection.queries = []
connection.use_debug_cursor = True
task.debug_start_time = time()
@task_postrun.connect()
def task_postrun(signal=None, sender=None, task_id=None, task=None, args=None, kwargs=None, retval=None, state=None):
if connection.queries:
logger = logging.getLogger('slowrequests')
try:
task_duration = time() - task.debug_start_time
except AttributeError:
task_duration = -1
for query in connection.queries:
duration = float(query['time'])
sql = query['sql']
if duration > settings.SLOW_TASK_QUERY_TIME:
msg = 'duration:{:.3f} qduration:{:.3f} SQL:{}'.format(task_duration, duration, sql)
logger.debug('Slow_task_query: task:%r args:%r kwargs:%r %s', task.name, args, kwargs, msg)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment