Могу ли я прервать задачу Celery другой задачей?

В моем проекте есть представление, которое запускает задачу Celery при регистрации пользователя. Задача проверяет, верифицирован ли пользователь через 3 дня после регистрации:

@shared_task()
def delete_user_if_not_verified(user_pk: int):
    user = User.objects.get(pk=user_pk)
    email = user.email
    if not user.is_verified:
        user.delete()
        return f'Delete {email} user'

Моя идея состоит в том, что эта задача будет прервана другой задачей в случае, если пользователь верифицировался намного раньше, например, сразу после регистрации. Я уже придумал, как отлавливать изменения в базе данных, но я просто не знаю, как я могу передать задачу или id пользователя, который верифицировался, в delete_user_if_not_verified(). Возможно ли это, или эта идея плоха, и я обойдусь одной задачей?

Проще создать периодическую задачу: https://docs.celeryproject.org/en/stable/userguide/periodic-tasks.html

Убедитесь, что вы привели запрос к базе данных в соответствие с вашей моделью. Цель - выбрать всех пользователей, которые зарегистрировались до трех дней назад и неактивны. После этого просто удалите их

@periodic_task(
    bind=True,
    run_every=(crontab(minute=0, hour=0))
)
def delete_not_registered_users(self):
    User.objects.filter(created__lt=datetime.datetime.now() - timedelta(days=3)), is_verified=False).delete()
Вернуться на верх