Why not use a dedicated message queue instead of Django signals?
The webhook endpoint was already wired into Django's request-response cycle. Introducing a standalone queue like RabbitMQ or SQS would have required rearchitecting the ingestion layer and adding infrastructure the team did not have capacity to operate. The signal-based approach kept the change scoped to a single file while solving the concurrency problem. The Celery layer already existed for other background tasks.