我可以用另一个中断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()

最新更新