Why Celery Tasks trigger signals twice

Celery uses signals to trigger functions. I am currently writing tests for my Celery tasks. A central point for me is to test the function that is triggered by a successfully completed task. In my case, the function is called execute_after_task() and stores the task ID in Redis.