Performance: pre_delete and post_delete signals
MEDIUM IMPACT
These signals affect the server-side processing time before and after deleting database records, impacting backend response time and user experience.
from django.db.models.signals import pre_delete from django.dispatch import receiver import threading @receiver(pre_delete, sender=MyModel) def async_cleanup(sender, instance, **kwargs): # Run cleanup asynchronously threading.Thread(target=lambda: instance.related_set.all().delete()).start()
from django.db.models.signals import pre_delete from django.dispatch import receiver import time @receiver(pre_delete, sender=MyModel) def heavy_cleanup(sender, instance, **kwargs): # Blocking long-running task time.sleep(5) # Simulate slow operation instance.related_set.all().delete()
| Pattern | Server Blocking | Database Load | User Wait Time | Verdict |
|---|---|---|---|---|
| Synchronous heavy work in pre_delete | High (blocks request) | High (multiple deletes) | High (slow response) | [X] Bad |
| Asynchronous cleanup in pre_delete | Low (non-blocking) | High (same deletes) | Low (fast response) | [OK] Good |