我可以用另一个中断 Celery 任务吗?

Can I interrupt Celery task by another one?

我的项目中有一个视图在用户注册时运行 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

看到您根据模型调整了数据库查询。目标是 select 所有三天前注册但不活跃的用户。然后删除它们

@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()