我尝试使用芹菜来执行定期任务,以删除未及时激活帐户的用户。下面的屏幕截图显示正确发现并执行了任务,但是当我检查数据库时没有进行任何更改。
芹菜任务:
#tasks.py
from celery.task.schedules import crontab
from celery.decorators import periodic_task
from celery.utils.log import get_task_logger
from .utils import unconfirmed_users_delete
logger = get_task_logger(__name__)
# A periodic task that will run every minute (the symbol "*" means every)
@periodic_task(run_every=(crontab(hour="*", minute="*", day_of_week="*")))
def delete_unconfirmed_users():
return unconfirmed_users_delete()
要执行的查询集(在django shell中检查并正确工作):
#utils.py
from django.contrib.auth.models import User
from django.utils import timezone
def unconfirmed_users_delete():
return User.objects.filter(is_active=False).filter(profile__key_expires__lt=timezone.now()).delete()
每分钟都正确调用该任务:
可能出现什么问题?
答案 0 :(得分:1)
正如@schillingt在大多数时候提到的,我们忘记(重新)启动定期任务的工作流程。
这是因为我们有一个节拍调度程序,它调度执行任务的任务和工作人员。
celery -A my_task beat # schedule tasks
celery worker -A my_task -l info # consume tasks
更好的解决方案是让工作人员安排任务和工作。执行。您可以使用
执行此操作celery worker -A my_task -l info --beat # schedule & consume tasks
这会安排定期任务并使用它。