我正在构建一个应用程序,其中用户的信息经常从外部 API 更新。为此,我正在使用django-rq
.
第一项工作每天安排一次,以获取需要更新其个人资料的用户。
对于第一个作业返回的每个结果,安排另一个作业从远程 API 获取新的用户信息并更新我的数据库中的用户。
# tasks.py import requests from django_rq import job @job('default') def get_users_to_update(): """Get a list of users to who need update""" users = User.objects.filter(some_condition_here...) return users @job('default') def remote_update_user(user): """Calls external API to get new user information""" url = 'http://somwhere.io/api/users/{}'.format(user.id) headers= {'Authorization': "Bearer {}".format(user.access_token)} # Send the request, probably takes long time r = requests.get(url, headers=headers) data = r.json() # new user data for key, value in data.items(): setattr(user, key, value) user.save() return user
我可以安排这两个工作,如下所示:
# update_info.py
import django_rq
scheduler = django_rq.get_scheduler('default')
scheduler.schedule(
scheduled_time=datetime.utcnow(),
func=tasks.get_users_to_update,
interval=24 * 60 * 60
)
scheduler.schedule(
scheduled_time=datetime.utcnow(),
func=tasks.remote_update_user,
interval=24 * 60 * 60
)
然而,这肯定不是我想要的。我想知道是否有任何方法django-rq
可以通知何时get_users_to_update
完成、获取结果并安排remote_update_user
.
rq
允许depends_on
将依赖作业声明为已提交作业,但似乎此类功能在django-rq
.