没有Celery的Django定时任务?
在我的应用程序中,用户有一些积分(也可以叫做信用点),这些积分和他们的月度订阅有关。
我想要在每个月的特定日期,自动为每个用户补充积分。需要注意的是,每个用户的这个日期是不一样的,具体取决于他们订阅的日期。
我听说过Celery可以用来处理定时任务,听起来可以满足我的需求,但可能有点复杂。有没有更简单的办法(也许是Django自带的)来实现这个呢?
1 个回答
4
你可以创建一个服务,用来检查你的记录,并执行你需要的操作。
下面是一个简单的例子,文件放在项目的根目录下,结构大概是这样的:
- manage.py
- my_service.py
- project_name
那么,my_service.py
的源代码可能是:
#!/usr/bin/env python
import os
import sys
import time
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.settings")
form django.contrib.auth.models import User
while True:
rows = User.objects.filter(created___startswith=...)
if not rows:
print 'sleep...'
time.sleep(10)
continue
[you actions should be here]
然后你可以通过命令 python my_service.py
在后台运行它。
或者你可以把这个脚本添加到定时任务中(如果这样做的话,这部分需要修改):
注意:如果你想把它添加到定时任务中,你需要把 while True
改成一个有限的循环,比如这样:
form django.contrib.auth.models import User
rows = User.objects.filter(created___startswith=...)
if not rows:
sys.exit(1)
while R in rows:
[you actions should be here]
现在,如果你想让它每小时运行一次,可以查看一下这个链接,里面有很多相关的例子。
注意:这只是一个例子,你需要把模型的名字改成你自己模型的名字和查询。